win C++,在当前路径下,获取文件夹名 | 获取所有文件

代码比较通用,记录下防走失。

环境:win10, VS2019, MSVC/14.29.30133


仅获取当前文件夹下的所有文件夹名,不递归到子文件夹内获取文件夹名。

#include <io.h>
#include <string>

std::vector<std::string> getDirs(std::string dir) {
    std::vector<std::string> folders;
    intptr_t  hFile;//用于查找的句柄
    struct _finddata_t fileinfo;//文件信息的结构体
    //第一次查找/*不可缺
    hFile = _findfirst(dir.append("/*").c_str(), &fileinfo);

    printf("%s\n", fileinfo.name); //打印出找到的文件的文件名
    while (0 == _findnext(hFile, &fileinfo))//循环查找其他文件夹
    {
        if ((fileinfo.attrib & _A_SUBDIR))
        {
            if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
                folders.push_back(fileinfo.name);
        }
    }
    _findclose(hFile);//别忘了关闭句柄
    return folders;
}
int main(){
    std::string test_dir = "D:";
    std::vector<std::string> files_n = getDirs(test_dir);
    return 0;
}

获取当前文件夹下的所有文件,返回文件完整路径。递归到子文件夹中查找文件。

#include <io.h>
#include <string>

void getAllFiles(std::string path, std::vector<std::string>& files)
{
    //文件句柄  
    intptr_t   hFile = 0;
    //文件信息  
    struct _finddata_t fileinfo;
    std::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)
                    getAllFiles(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);
    }
}
int main(){
    std::string test_dir = "D:";
    getFiles(test_dir, files_n);
    return 0;
}

参考资料:

1. _finddata_t结构体用法

2.  _findnext 报错

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

4.  C++获取指定目录下的所有文件和文件夹

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值