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

来源:互联网 发布:淘宝宝贝突然被删除 编辑:程序博客网 时间:2024/06/08 17:52

原文转载自:http://www.jb51.net/article/52237.htm

主要用到了以下几个头文件(类):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
voidgetAllFiles( 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);
intsize = files.size();
ofn<<size<<endl;
for(inti = 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
voidgetJustCurrentDir( 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
voidgetJustCurrentFile( 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
voidgetFilesAll( 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);
   }
 }
0 0
原创粉丝点击