C++读取特定路径下文件目录及文件名称

Hanna ·
更新时间:2024-11-13
· 656 次阅读

  这几天在弄一个项目,需要读取给定路径下的所有文件夹名称或所有带后缀的文件名。   查了下C++的资料,发现有很多方法,这里总结其中的一种,其他用法类似。   主要用到了以下几个头文件(类):io.h, fstream, string。   1、读取某给定路径下所有文件夹与文件名称,并带完整路径。代码如下:

 

1 void getAllFiles( string path, vector<string>& files) 2 { 3     //文件句柄 4     long   hFile   =   0; 5     //文件信息 6     struct _finddata_t fileinfo;  //很少用的文件信息读取结构 7     string p;  //string类很有意思的一个赋值函数:assign(),有很多重载版本 8     if((hFile = _findfirst(p.assign(path).append("\*").c_str(),&fileinfo)) !=  -1) 9     { 10         do 11         { 12             if((fileinfo.attrib &  _A_SUBDIR))  //比较文件类型是否是文件夹 13             { 14                 if(strcmp(fileinfo.name,".") != 0  &&  strcmp(fileinfo.name,"..") != 0) 15                 { 16                     files.push_back(p.assign(path).append("\").append(fileinfo.name) ); 17                     getFilesall( p.assign(path).append("\").append(fileinfo.name), files ); 18                 } 19             } 20             else 21             { 22                 files.push_back(p.assign(path).append("\").append(fileinfo.name) ); 23             } 24         }while(_findnext(hFile, &fileinfo)  == 0);  //寻找下一个,成功返回0,否则-1 25         _findclose(hFile); 26     } 27 }

  该函数有两个参数,第一个为路径字符串(string类型,好为路径);第二个参数为文件夹与文件名称存储变量(vector类型,引用传递)。在主函数中调用格式(并将结果保存在文件"AllFiles.txt"中,第一行为总数):

 

1 char * filePath = "E:\YunShi"; 2 vector<string> files; 3 char * distAll = "AllFiles.txt"; 4 getFilesall(filePath, files); 5 ofstream ofn(distAll); 6 int size = files.size(); 7 ofn<<size<<endl; 8 for (int i = 0;i<size;i++) 9 { 10     ofn<<files[i]<<endl; 11 } 12 ofn.close();

  结果如下:   同理,只读取某给定路径下的当前文件夹名(以下类似,只给出函数,调用案例同上):

 

1 void getJustCurrentDir( string path, vector<string>& files) 2 { 3     //文件句柄 4     long   hFile   =   0; 5     //文件信息 6     struct _finddata_t fileinfo; 7     string p; 8     if((hFile = _findfirst(p.assign(path).append("\*").c_str(),&fileinfo)) !=  -1) 9     { 10         do 11         { 12             if((fileinfo.attrib &  _A_SUBDIR)) 13             { 14                 if(strcmp(fileinfo.name,".") != 0  &&  strcmp(fileinfo.name,"..") != 0) 15                 { 16                     files.push_back(fileinfo.name); 17                     //files.push_back(p.assign(path).append("\").append(fileinfo.name) ); 18                 } 19 20             } 21         }while(_findnext(hFile, &fileinfo)  == 0); 22         _findclose(hFile); 23     } 24 }

  只读取某给定路径下的当前文件名:

 

1 void getJustCurrentFile( string path, vector<string>& files) 2 { 3     //文件句柄 4     long   hFile   =   0; 5     //文件信息 6     struct _finddata_t fileinfo; 7     string p; 8     if((hFile = _findfirst(p.assign(path).append("\*").c_str(),&fileinfo)) !=  -1) 9     { 10         do 11         { 12             if((fileinfo.attrib &  _A_SUBDIR)) 13             { 14                 ; 15             } 16             else 17             { 18                 files.push_back(fileinfo.name); 19                 //files.push_back(p.assign(path).append("\").append(fileinfo.name) ); 20             } 21         }while(_findnext(hFile, &fileinfo)  == 0); 22         _findclose(hFile); 23     } 24 }

  只读取某给定路径下的所有文件名(即包含当前目录及子目录的文件):

 

1 void getFilesAll( string path, vector<string>& files) 2 { 3     //文件句柄 4     long   hFile   =   0; 5     //文件信息 6     struct _finddata_t fileinfo; 7     string p; 8     if((hFile = _findfirst(p.assign(path).append("\*").c_str(),&fileinfo)) !=  -1) 9     { 10         do 11         { 12             if((fileinfo.attrib &  _A_SUBDIR)) 13             { 14                 if(strcmp(fileinfo.name,".") != 0  &&  strcmp(fileinfo.name,"..") != 0) 15                 { 16                     //files.push_back(p.assign(path).append("\").append(fileinfo.name) ); 17                     getFilesA( p.assign(path).append("\").append(fileinfo.name), files ); 18                 } 19             } 20             else 21             { 22                 files.push_back(p.assign(path).append("\").append(fileinfo.name) ); 23             } 24         }while(_findnext(hFile, &fileinfo)  == 0); 25         _findclose(hFile); 26     } 27 }

  至此,简单的读取功能实现了,以后只要指定路径,能轻松地得到对应的路径与文件名称。

 



文件目录 c+ C++

需要 登录 后方可回复, 如果你还没有账号请 注册新账号