C++ 遍历目录文件及打印文件和其后缀

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

猜你喜欢

转载自blog.csdn.net/invisible_sky/article/details/78487192