C++ 获取文件夹下的所有文件名

头文件:#include<io.h>

getFiles1函数:获取某个文件夹下的所有文件,返回各文件的路径

getFiles2函数:获取某个文件夹下的所有文件,返回各文件的路径和名称

//主函数
char
* filePath = "D:\\sample"; vector<string> files; //vector<string> filesname;
//获取该路径下的所有文件路径 getFiles1(filePath, files);
//获取该路径下的所有文件路径和文件名
//getFiles2(filePath, files, filesname);
char str[30]; for (int i = 0;i < files.size();i++) { cout<<files[i].c_str()<<endl; }

 

void getFiles1( string path, vector<string>& files )  
{  
    //文件句柄  
    //long hFile = 0;  //win7
intptr_t hFile = 0; //win10
//文件信息 struct _finddata_t fileinfo; string p; if((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) != -1)
// "\\*"是指读取文件夹下的所有类型的文件,若想读取特定类型的文件,以png为例,则用“\\*.png” {
do { //如果是目录,迭代之 //如果不是,加入列表 if((fileinfo.attrib & _A_SUBDIR)) { if(strcmp(fileinfo.name,".") != 0 && strcmp(fileinfo.name,"..") != 0) getFiles1( p.assign(path).append("\\").append(fileinfo.name), files ); } else { files.push_back(path + "\\" + fileinfo.name); } }while(_findnext(hFile, &fileinfo) == 0); _findclose(hFile); } }

 

void getFiles2( string path, vector<string>& files, vector<string> &ownname)  
{  
    /*files存储文件的路径及名称(eg.   C:\Users\WUQP\Desktop\test_devided\data1.txt)
     ownname只存储文件的名称(eg.     data1.txt)*/
    
    //文件句柄  
    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)  
                    getFiles2( p.assign(path).append("\\").append(fileinfo.name), files, ownname ); 
            }  
            else  
            {  
                files.push_back(path +"\\" + fileinfo.name);  
                ownname.push_back(fileinfo.name);
            }  
        }while(_findnext(hFile, &fileinfo)  == 0);  
        _findclose(hFile);  
    }  
}

Win10下C++代码文件夹遍历错误:0xC0000005: 写入位置时发生访问冲突

win7下定义的文件句柄类型是long型,在win10下将其改为intptr_t类型即可。

参考博客:

https://www.cnblogs.com/fnlingnzb-learner/p/6424563.html

https://www.cnblogs.com/wqpkita/p/6849283.html

原文链接: https://www.cnblogs.com/yuehouse/p/10159358.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++ 获取文件夹下的所有文件名

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/287298

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月15日 上午9:58
下一篇 2023年2月15日 上午10:00

相关推荐