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

    转载地址:http://www.cnblogs.com/tgyf/p/3839894.html

     1 void getAllFiles( string path, vector<string>& files)  
     2 {  
     3     //文件句柄  
     4     long   hFile   =   0;  
     5     //文件信息  
     6     struct _finddata_t fileinfo;  //很少用的文件信息读取结构
     7     string p;  //string类很有意思的一个赋值函数:assign(),有很多重载版本
     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);  //寻找下一个,成功返回0,否则-1
    25         _findclose(hFile); 
    26     } 
    27 }

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

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

     结果如下:

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

    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 void getJustCurrentFile( string path, vector<string>& 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<string>& 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) );  //若不需要路径可改为files.push_back(fileinfo.name)
    23             }  
    24         }while(_findnext(hFile, &fileinfo)  == 0);  
    25         _findclose(hFile); 
    26     } 
    27 }

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

  • 相关阅读:
    【转】ArcGIS 合并要素 Union Dissolve Append Merge
    Linux命令行下编辑常用快捷键
    rpm aid用法
    SUSE 吉祥物图片
    F9初装体验
    openSUSE10、SUSE EVAL10和SUSE10的区别[翻译]
    装有Linux DIY牛人百元人民币昂贵甜头液晶一体机
    SUSE10.3恢复GRUB体例
    64位Fedora还挑CPU
    Ubuntu8.04安置XCrysDen
  • 原文地址:https://www.cnblogs.com/thefirstfeeling/p/5736881.html
Copyright © 2011-2022 走看看