项目总结 之 C++获取文件夹下所有文件

在最近做的一个项目中,需要一个获取一个文件夹下文件的功能,之前一直对文件的操作一直停留在对文件的读写,还从来没有接触过文件夹相关的操作。因此,这次有幸使用了,还是记录下来吧,以后肯定也会有很多使用的机会。

参考博客
C++ 文件/文件夹操作

1 本人项目中使用的方法(算比较蠢的吧,还是代码写的太少了。。)

需要使用dirent.h这个头文件,然后使用的基本流程是opendir ->readdir->closedir
和FILE类型不同,这里opendir返回的是DIR类型的指针。readdir返回的是struct dirent结构体类型。

结构体的详细内容如下:

struct dirent
  {
   
#ifndef __USE_FILE_OFFSET64
    __ino_t d_ino;
    __off_t d_off;
#else
    __ino64_t d_ino;
    __off64_t d_off;
#endif
    unsigned short int d_reclen;
    unsigned char d_type;
    char d_name[256];       /* We must not include limits.h! */
  }; 
//查找path路径下的所有文件
vector<string> findFileNames(const char* path){
   
	//用于保存文件名
    vector<string> fileNames;
    //dirent指针是一个结构体指针
    struct dirent *ptr;
    DIR *dir;
    dir=opendir(path);
    while((ptr=readdir(dir))!=NULL)
    {
   
        //跳过'.'和'..'两个目录
        if(ptr->d_name[0] == '.')
            continue;
        fileNames.push_back(ptr->d_name);
    }
    closedir(dir);
    return fileNames;
}

这个方法是适用于Linux下的文件操作,在Windows上测试会报头文件找不到。如果真的要使用的话需要去下载这个头文件,并放入VS的include文件夹下即可。
下载地址
dirent.h

2.filesystem库(和上一个相比,这个就和谐多了,是可移植的)

2.1 获取文件的一些属性

//注意 /= 和 += 的区别, /= 表示追加下级目录, +=  仅仅是字符串的串接 
    path dir("C:\\Windows");
    dir /= "System32";       //追加下级目录
    dir /= "services.exe";
    std::cout << dir << std::endl;
    std::cout << dir.string() << std::endl;            //转换成std::string 类型
    std::cout << dir.root_name()<< std::endl;          //盘符名:C:
    std::cout << dir.root_directory()<< std::endl;     //根目录:"\"
    st
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值