设为首页 加入收藏

TOP

C++读取特定路径下文件目录及文件名称(一)
2015-07-24 05:33:32 来源: 作者: 【 】 浏览:10
Tags:读取 特定 路径 文件 目录 名称
这几天在弄一个项目,需要读取给定路径下的所有文件夹名称或所有带后缀的文件名。
?
  查了下C++的资料,发现有很多方法,这里总结其中的一种,其他用法类似。
?
  主要用到了以下几个头文件(类):io.h, fstream, string。
?
  1、读取某给定路径下所有文件夹与文件名称,并带完整路径。代码如下:
?
复制代码
?1 void getAllFiles( string path, vector& 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 ? ? ? ? ? ? ? ? ? ? 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); ?
25 ? ? ? ? _findclose(hFile);?
26 ? ? }?
27 } ?
复制代码
  该函数有两个参数,第一个为路径字符串(string类型,最好为绝对路径);第二个参数为文件夹与文件名称存储变量(vector类型,引用传递)。在主函数中调用格式(并将结果保存在文件"AllFiles.txt"中,第一行为总数):
?
复制代码
?1 char * filePath = "E:\\YunShi"; ?
?2 vector files; ?
?3 char * distAll = "AllFiles.txt";
?4 getFilesall(filePath, files);
?5 ofstream ofn(distAll);
?6 int size = files.size();?
?7 ofn<
?8 for (int i = 0;i
?9 { ?
10 ? ? ofn<
11 }
12 ofn.close();
?
?
?
?
  同理,只读取某给定路径下的当前文件夹名(以下类似,只给出函数,调用案例同上):
?
复制代码
?1 void getJustCurrentDir( string path, vector& 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& 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& files) ?
?2 { ?
?3 ? ? //文件句柄 ?
?4 ? ? long ? hFile ? = ? 0; ?
?5 ? ? //文件信息 ?
?6 ? ? struct _finddata_t fileinfo; ?
?7 ? ? string p;
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Generate Parentheses 下一篇bzoj 2458: [BeiJing2011]最小三..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: