zoukankan      html  css  js  c++  java
  • C++读取特定路径下文件目录及文件名称

     

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

    1、读取某给定路径下所有文件夹与文件名称,并带完整路径。代码如下:

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

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

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

    结果如下图:

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

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

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

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

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

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

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

  • 相关阅读:
    java中map接口hashMap以及Enty之间的用法和关系
    Collection集合总结,List和set集合的用法,HashSet和LinkedHashSetde用法
    微信小程序开发攻略
    Java闰年的计算,Calendar的用法
    Java计算计算活了多少天
    Java用代码演示String类中的以下方法的用法
    Java判断一个字符串中有多少大写字母、小写字母和数字
    Java将一个字符串的首位改为大写后边改为小写的实现,String
    Java 获取一个字符串中,另一个字符串出现的次数
    linux下重命名文件或文件夹(linux)
  • 原文地址:https://www.cnblogs.com/tgyf/p/3839894.html
Copyright © 2011-2022 走看看