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

Wesley13
• 阅读 783

头文件:#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

点赞
收藏
评论区
推荐文章
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Python清空指定文件夹下所有文件的方法
From:https://blog.csdn.net/baoxiao7872/article/details/90340163其他的总结1、remove()同unlink()的功能是一样的在Windows系统中,删除一个正在使用的文件,将抛出异常。在Unix中,目录表中的记录被删除,但文件的存储还在。使用
Wesley13 Wesley13
3年前
Java修改文件夹下所有文件名
惯例:我是温浩然:最近,由于某些特殊情况,需要在一个文件夹下,修改所有文件的名字,所有文件名加前缀。代码如下:importjava.io.File;publicclassDemo{publicstaticvoidmain(Stringargs){Stringpath"
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
3年前
Linux系统删除文件夹下所有文件
!(https://oscimg.oschina.net/oscnet/up7d5d4ae17890de6c42fae9460472f704b21.JPEG)这篇文章来为大家介绍一下如何在Linux系统下删除文件,当Linux系统使用时间过长以后,难免会产生一些垃圾文件,这些文件除了会占用磁盘空间之外还会降低系统的运行效率,所以长时间运行后
Stella981 Stella981
3年前
HIVE 时间操作函数
日期函数UNIX时间戳转日期函数: from\_unixtime语法:   from\_unixtime(bigint unixtime\, string format\)返回值: string说明: 转化UNIX时间戳(从19700101 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式举例:hive   selec
Stella981 Stella981
3年前
ASP.NET 将Word转换成PDF
一、基于Office的解决方案1.获取指定文件夹下的所有word文件staticvoidMain(stringargs){try{Console.WriteLine("开始");stringpath@"XXXXXXXXXXXXX
Stella981 Stella981
3年前
Linux下的快捷键整理
20191026   00:37:25今天上网整理了相关资料,希望对大家有用:1.关于终端的快捷键:Tab:tab键是比较常用的一个快捷键,它的作用是补全文件名或者路径。举例来说,输入”cd /ho”在按一下tab键,终端里就会显示”cd /home”了。如果您的文件夹下,有两个名字开头部分相同的文件,比如