C++ 遍历目录文件及打印文件和其后缀
#include <iostream>
#include <string>
#include <windows.h>
#include <vector>
#include <assert.h>
using namespace std;
typedef std::vector<std::string> FilenameVec;
std::string GetFileExtension(std::string fileName)
{
assert(fileName.size() > 0);
return fileName.substr(fileName.find_last_of(".") + 1);
}
FilenameVec GetFileNameFromFolder(char *folderPath)
{
assert(folderPath != nullptr);
WIN32_FIND_DATA FindFileData;
FilenameVec filenameVec;
char dir[MAX_PATH];
memset(dir, 0, MAX_PATH);
sprintf_s(dir, "%s\\*.*", folderPath);
HANDLE hFind = ::FindFirstFile(dir, &FindFileData);
if (INVALID_HANDLE_VALUE == hFind)
{
filenameVec.clear();
return filenameVec;
}
do
{
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (strcmp(FindFileData.cFileName, ".") == 0 ||
strcmp(FindFileData.cFileName, "..") == 0)
continue;
sprintf_s(dir, "%s\\%s", folderPath, FindFileData.cFileName);
FilenameVec subImgVec = GetFileNameFromFolder(dir);
filenameVec.insert(filenameVec.end(), subImgVec.begin(), subImgVec.end());
}
else
{
filenameVec.push_back(FindFileData.cFileName);
}
} while (FindNextFile(hFind, &FindFileData));
FindClose(hFind);
return filenameVec;
}
int _tmain(int argc, _TCHAR* argv[])
{
std::string path = "E:\\project\\test\\ListFloder\\ListFloder";
FilenameVec fVec = GetFileNameFromFolder(const_cast<char*>(path.c_str()));
for (auto it : fVec)
{
cout << it.c_str() << "\t"<<GetFileExtension(it)<<endl;
}
cin.get();
return 0;
}
下载工程:http://download.csdn.net/download/invisible_sky/10111050