服务器之家

服务器之家 > 正文

C++实现读取特定路径下文件夹及文件名的方法

时间:2021-01-22 11:53     来源/作者:C++教程网

本文所述实例代码主要实现读取给定路径下的所有文件夹名称或所有带后缀的文件名的功能。具体解决方法如下:
 
主要用到了以下几个头文件(类):io.h, fstream, string。
 
首先,读取某给定路径下所有文件夹与文件名称,并带完整路径。实现代码如下:

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

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

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

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

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

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

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

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

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

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
返回顶部