接下来,我们定义一个_finddata_t类型的变量file_info 。首先,这里的_finddata_t其实是一个结构体,专门用来存储计算机系统中不同文件的各类信息;而file_info就是文件的不同信息 。前面我们提到,file_handle相当于我们的身份证号码,那么这里file_info相当于就是存储了我们性别、家庭住址、爱好等信息的个人信息库 。
随后,我们再定义一个字符串string类型的变量temp,其用来存储临时生成的文件路径 。
接下来,进入if判断语句;这里我们将其拆开来看 。首先,temp.assign(path).append("/*" + ext)其实就表示我们需要筛选的特定格式的文件,在本文中即E:2_Project2_ChlorophyllProduce1_Data0_Test)/*.bmp,并将其通过.assign()函数赋给字符串temp 。随后,.c_str()函数将前面赋值好的字符串temp转为标准的C语言的格式(这是因为后面操作需要保证字符串为标准的C语言格式) 。随后,将转换好的C语言格式字符串作为第一个参数,带入_findfirst()函数;其第二个参数则是file_info 。_findfirst()函数的功能是在当前路径下,找到与第一个参数(在这里也就是转换好的C语言格式字符串)相匹配的第一个文件;如果能找到这个文件,那么其就返回该文件的句柄,并将该文件的信息放入file_info;如果找不到这个文件,那么该函数就返回-1 。因此,这里的if判断语句表示,一旦在当前路径下找到我们需要的文件,就继续进行接下来的代码;如果找不到需要的文件,那么相当于当前文件夹下就没有符合我们要求的文件 。
接下来,执行do语句内部的代码 。其中,temp.assign(path).append("/").append(file_info.name)就表示当前找到的文件的路径及其名称,并通过push_back()函数将其附加至vector变量file的末尾 。随后,进行while语句内部代码的判断——其中,_findnext()函数其实和前面的_findfirst()函数比较类似,它的作用是按照当前_findfirst()函数中所指定的文件筛选要求,进行继续筛选(_findfirst()函数相当于是找到了第一个符合我们筛选要求的文件,而_findnext()函数就是继续找,找到下一个符合要求的文件);如果其找到了,那么就将所找到的文件的句柄与信息返回到其两个参数中,且返回一个值0;如果没有找到的话就返回-1 。因此,这里while语句相当于就是判断当前路径下还有没有我们需要的文件,如果有的话就再执行do语句内部的代码(即将文件的路径放入vector变量file的末尾);如果没有的话,那么就结束前面的循环 。
最后,_findclose()表示将当前句柄所表示的文件加以关闭,并将对应的文件资源释放 。
2 完整代码
本文所用到的全部代码如下 。
#include#include#includeusing namespace std;void get_need_file(string path, vector& file, string ext);int main() {string file_path = R"(E:2_Project2_ChlorophyllProduce1_Data0_Test)";vector my_file;string need_extension = ".bmp";get_need_file(file_path, my_file, need_extension);for (int i = 0; i < my_file.size(); i++)cout << "File " << i + 1 << " is:" << endl;cout << my_file[i] << endl;if (my_file.size() == 0)cout << "No file can be found!" << endl;elsecout << endl << "Find " << my_file.size() << " file(s)." << endl;return 0;void get_need_file(string path, vector& file, string ext)intptr_t file_handle = 0;struct _finddata_t file_info;string temp;if ((file_handle = _findfirst(temp.assign(path).append("/*" + ext).c_str(), &file_info)) != -1)dofile.push_back(temp.assign(path).append("/").append(file_info.name));} while (_findnext(file_handle, &file_info) == 0);_findclose(file_handle);
运行上述代码后,将会得到所筛选出的文件各自的名称,以及其具体数量 。

文章插图
至此,大功告成 。

文章插图
推荐阅读
- 电脑微信文件夹储存在什么位置?
- linux中删除文件夹中所有文件 linux 删除所有文件夹
- Windows10怎么更改登录用户文件夹名
- 美国国家安全局督促弃用 C/C++,使用更安全的 Rust、C# 等
- 手机相册在哪个文件夹
- 企业文件加密软件推荐 企业如何选择文件夹加密软件使用
- 手机版b站下载的视频在文件夹哪里
- 怎么快速批量生成文件夹 如何快速生成批量文件夹名称
- 如何备份整个硬盘为镜像文件名 如何备份整个硬盘为镜像文件夹
- lcu文件夹可以删除吗?lcu是什么意思?
