C++ 不利用第三方库获取指定文件夹的所有文件名、特定类型的文件名

1 所需包含头文件

#include 
#include 
#include 
#include 

2 获得指定目录下的所有文件(不递归搜索子文件夹)

void GetAllFilesNotIncludeSubfolder(string path, vector& files) 
{
  // 文件句柄
  long hFile = 0;
  // 文件信息
  struct _finddata_t fileinfo; 
 
  string p;
 
  if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1) {
    do {
      // 第一种:保存文件的全路径
      files.push_back(p.assign(path).append("\\").append(fileinfo.name));
 	 //第二种:不保存文件的全路径
 	  files.push_back(fileinfo.name);
      } while (_findnext(hFile, &fileinfo) == 0); //寻找下一个,成功返回0,否则-1
 
    _findclose(hFile);
  }
}

3 获取指定目录下的所有文件(递归搜索子文件夹)

void GetAllFilesIncludeSubfolder(string path, vector& files) {
  //文件句柄
  long hFile = 0;
  //文件信息
  struct _finddata_t fileinfo; 
  string p; 
  if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1) {
    do {
      if ((fileinfo.attrib & _A_SUBDIR)) { //比较文件类型是否是文件夹
        if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0) {
          // 第一种:保存文件的全路径
      files.push_back(p.assign(path).append("\\").append(fileinfo.name));
 	 //第二种:不保存文件的全路径
 	 files.push_back(fileinfo.name);
          //递归搜索
          GetAllFilesIncludeSubfolder(p.assign(path).append("\\").append(fileinfo.name), files);
        }
      }
      else {
        // 第一种:保存文件的全路径
      files.push_back(p.assign(path).append("\\").append(fileinfo.name));
 	     //第二种:不保存文件的全路径
 	  files.push_back(fileinfo.name);
      }
    } while (_findnext(hFile, &fileinfo) == 0); //寻找下一个,成功返回0,否则-1
    _findclose(hFile);
  }
}

4 获取指定格式的文件(不递归搜索子文件夹)

/*
path: 指定目录
files: 保存结果
fileType: 指定的文件格式,如 .jpg
*/
void GetAllFilesIncludeSubfolder(string path, vector& files,string fileType) 
{
  // 文件句柄
  long hFile = 0;
  // 文件信息
  struct _finddata_t fileinfo; 
 
  string p;
 
  if ((hFile = _findfirst(p.assign(path).append("\\*" + fileType).c_str(), &fileinfo)) != -1) {
    do {
      // 第一种:保存文件的全路径
      files.push_back(p.assign(path).append("\\").append(fileinfo.name));
 	 //第二种:不保存文件的全路径
 	  files.push_back(fileinfo.name);
 
      } while (_findnext(hFile, &fileinfo) == 0); //寻找下一个,成功返回0,否则-1
 
    _findclose(hFile);
  }
}

5 获取指定目录下的所有指定类型的文件(递归搜索子文件夹)

#include 
#include 
#include 
#include 
#include 

using namespace std;

void split(const string& str, const string& sp, vector& vec)
{
	size_t size = sp.size();

	vec.clear();
	size_t end = 0, start = 0;
	while (start != string::npos && start < str.size())
	{
		end = str.find(sp, start);
		vec.push_back(str.substr(start, end - start)); // end == 0 时压入空字符串
		start = end == string::npos ? end : end + size;
	}

	if (vec.empty())
		vec.push_back(str);
}


void GetSpecialFilesFromDirectory(string path, string fileType, vector& files)
{
	vector tempFileTypes;
	split(fileType, " ", tempFileTypes);
	if (tempFileTypes.size() == 0)
		return;

	for (int i=0;i& files) 
{
	vector tempFileTypes;
	split(fileType, " ", tempFileTypes);
	if (tempFileTypes.size() == 0)
		return;
	//文件句柄
	long hFile = 0;
	//文件信息
	struct _finddata_t fileinfo;
	string p;
	if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1)
	{
		do
		{
			if ((fileinfo.attrib & _A_SUBDIR)) 
			{ //比较文件类型是否是文件夹
				if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0) 
				{
					string subForld = p.assign(path).append("\\").append(fileinfo.name);
					//递归搜索
					GetSpecialFilesFromDirectory(subForld, fileType, files);
					GetAllFilesIncludeSubfolder(p.assign(path).append("\\").append(fileinfo.name),fileType, files);
				}
			}
			else 
			{
				for (int i=0;i m_Files;
	string path = "E:\\test";
	GetAllFilesIncludeSubfolder(path, ".h .cpp", m_Files);

	for (int i=0;i

你可能感兴趣的:(C++)