c++实现递归查找文件

提示:在view开发中用到递归查找文件的方法

文章目录

  • 前言
  • 一、递归查找文件
  • 二、string和CString相互转换
  • 三、string和CString相互转换
  • 四、find和substr联合使用
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、递归查找文件

头文件

#include 
#include 
#include 
#include 
#include 
using namespace std

代码

void getAllFiles(string path, vector& files) {
	//文件句柄
	long 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));
					//递归搜索
					getAllFiles(p.assign(path).append("\\").append(fileinfo.name), files);
				}
			}
			else {
				files.push_back(p.assign(path).append("\\").append(fileinfo.name));
			}
		} while (_findnext(hFile, &fileinfo) == 0);  //寻找下一个,成功返回0,否则-1
		_findclose(hFile);
	}
}

调用

int main(int argc, char** argv)
{
	vector temp;
	getAllFiles("J:\\faces\\test", temp,".jpg");
	for (int i = 0; i < temp.size();++i	)
	{
		cout << temp[i] << endl;
	}
	return 0;
}

二、查找特定文件

自己用于查找特定文件,对上面代码做了修改

void getAllFiles(string path, vector& files, string str ,string& targetFile) {
	//文件句柄
	long 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));
					//递归搜索
					getAllFiles(p.assign(path).append("\\").append(fileinfo.name), files, str, targetFile);
				}
			}
			else {
				files.push_back(p.assign(path).append("\\").append(fileinfo.name));
				if (p.find(str) != string::npos)
				{
					targetFile = p;
				}
			}
		} while (_findnext(hFile, &fileinfo) == 0);  //寻找下一个,成功返回0,否则-1
		_findclose(hFile);
	}
}

调用

CString strpath = dlgFile.GetFolderPath();
std::string path(CW2A(strpath.GetString()));
string str = ".dat";
vector vec;
string targetPath;
getAllFiles(path, vec, str, targetPath);

 奇怪的是我在删除了vec.push语句后竟然没有得到想要的结果。后面再议

2023年7月14日11:36:00更新:

另外还需要注意的是当vec是传引用的时候,vec才能存储所有的文件,这个还未细研究。

三、string和CString相互转换

一、string转CString

string str = "hello world";
CString cstr(str.c_str());


二、CString转string

CString theCStr = L"Hello C++";
std::string STDStr(CW2A(theCStr.GetString()));

四、substr()和find()函数的联合使用示例

string a = "123.456";
//al、ar分别为第一个浮点数的整数部分、小数部分
//截取字符串
string al = a.substr(0, a.find('.')); //al = "123"
string ar = a.substr(a.find('.') + 1); //ar = "456"


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

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