《C++》c++批量读取文件------获取文件名

在最近的一个项目中,需要用c++读取6000多个文件。大家都知道,c++读取文件的能力没有Java等语言那么强大,但是在经过了一系列的尝试之后,成功了。在实施过程中将其分为两步,便于理解。

(1)获取需要读取的文件的所有文件名,并保存到filepath.txt中 ;

(2)每次从filepath.txt中读取一行作为路径,最后用一个“for循环”,或者feof()函数控制结束。

一、以下共享获取文件名的程序,保证直接可以运行。

#include "stdafx.h"
#include 
#include "fstream"
#include "string"
#include "StrmidO.h"
#include    
#include   using namespace std;int main()
{FILE *filepath;filepath = fopen("E:\\Jsonpath.txt", "a");long Handle;struct _finddata_t FileInfo;if ((Handle = _findfirst("E:\\工程管理数据\\jsons\\*.json", &FileInfo)) == -1L)printf("没有找到匹配的项目\n");else{printf("%s\n", FileInfo.name);fprintf(filepath, "E:\\工程管理数据\\jsons\\%s\n", FileInfo.name);while (_findnext(Handle, &FileInfo) == 0)/*printf("E:\\%s\n", FileInfo.name);*/fprintf(filepath, "E:\\工程管理数据\\jsons\\%s\n", FileInfo.name);_findclose(Handle);}return 0;
}

通过以上程序可以获取任意路径下的所有文件名,然后以自己想要的路径输出!

二、以下程序可以寻找你感兴趣的任意文件

#include "stdafx.h"
#include 
#include "windows.h"
#include 
#include 
#include 
#include    
#include using namespace std;void GetAllFormatFiles(string path, vector& files, string format)
{//文件句柄    long   hFile = 0;//文件信息    struct _finddata_t fileinfo;string p;if ((hFile = _findfirst(p.assign(path).append("\\*" + format).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) );  GetAllFormatFiles(p.assign(path).append("\\").append(fileinfo.name), files, format);}}else{files.push_back(p.assign(path).append("\\").append(fileinfo.name));}} while (_findnext(hFile, &fileinfo) == 0);_findclose(hFile);}
}int main()
{string filePath = "E:\\1271\\1271\\";vector files;char * distAll = "E:\\AllFiles.txt";//读取所有格式为txt的文件  string format = ".html";GetAllFormatFiles(filePath, files, format);ofstream ofn(distAll);int size = files.size();ofn << size << endl;for (int i = 0; i < size; i++){ofn << files[i] << endl;cout << files[i] << endl;}ofn.close();return 0;
}BOOL SearchFilesByWildcard(WCHAR *wildcardPath)
{HANDLE hFile = INVALID_HANDLE_VALUE;WIN32_FIND_DATA pNextInfo;FILE *filepath;filepath = fopen("E:\\filepath.txt", "w");hFile = FindFirstFile(wildcardPath, &pNextInfo);if (INVALID_HANDLE_VALUE == hFile){return FALSE;}WCHAR infPath[MAX_PATH] = { 0 };if (pNextInfo.cFileName[0] != '.'){printf("Find result = %ws\r\n", pNextInfo.cFileName);fprintf(filepath, "E:\\\\filepath\\\\%ws\r\n", pNextInfo.cFileName);}while (FindNextFile(hFile, &pNextInfo)){if (pNextInfo.cFileName[0] == '.'){continue;}printf("Find result = %ws\r\n", pNextInfo.cFileName);}return FALSE;
}int main(int argc, char* argv[])
{setlocale(LC_ALL, "chs");查找 abc开头的txt文件  printf("Search 1:\r\n");for ( ; ; ){if (pNextInfo.cFileName == NULL){break;}SearchFilesByWildcard(L"E:\\Test\\1*.html");printf("\r\n");}查找 abc开头的文件  printf("Search 2:\r\n");SearchFilesByWildcard(L"E:\\Test\\abc*");printf("\r\n");查找jnt文件  printf("Search 3:\r\n");SearchFilesByWildcard(L"E:\\Test\\*.jnt");printf("\r\n");查找文件名为4个字符的txt文件  printf("Search 4:\r\n");SearchFilesByWildcard(L"E:\\Test\\????.txt");printf("\r\n");查找包含"档案"的文件  printf("Search 5:\r\n");SearchFilesByWildcard(L"E:\\Test\\*档案*");printf("\r\n");return 0;
}

版权声明:本文为CSDN博主「C赵江松」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_38149046/article/details/80312215


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部