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

这篇文章主要介绍了C++实现读取特定路径下文件夹及文件名的方法,需要的朋友可以参考下
原文地址: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
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);
    }
  }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值