首页 > 解决方案 > 如何使用类似 opendir 的函数打开目录,但使用文件系统库?

问题描述

如何使用类似 opendir 的函数列出目录,但使用 C++ 中的文件系统库?

dirent 中的 opendir 函数,打开目录但我们看不到它,这没关系。

for (const auto & entry : fs::recursive_directory_iterator(dir))

基本上,这是我用来遍历目录的代码。fs 是文件系统。

 

现在,opendir 实际上是静默打开目录。现在如果它没有足够的权限,它就无法打开该目录,它会返回,No such directory。(这个函数不是我自己写的)

void SearchFiles(std::string Directory)
{
    DIR* pDir;

    if((pDir = opendir(Directory.c_str())) != NULL)
    {
        struct dirent* pEntry;

        /* print all the files and directories within directory */
        while((pEntry = readdir(pDir)) != NULL)
        {
            if(pEntry->d_type == DT_DIR)
            {
                std::string Name = pEntry->d_name;

                if(Name != "." && Name != "..")
                    SearchFiles(Directory + Name + '\\');
            }
            else if(pEntry->d_type == DT_REG)
            {
                g_vFiles.push_back(Directory + pEntry->d_name);
            }
        }

        closedir(pDir);
    }
    else
    {
        printf("No such directory: '%s'\n", Directory.c_str());
    }
}

现在,我不太了解上面的代码,但是是的...

 

不确定文件系统库有多新,但它有什么功能或其他东西,所以我可以让它像上面那样做吗?

因为当将我的方法与上面的文件系统代码一起使用时,它会列出所有内容,即使是我无权访问的内容,我猜。

 

如果不使用 dirent.h 则不存在。我真的必须使用 * 来执行 pDir 吗?我不能只写 DIR pDir,因为指针的东西对我来说不是很清楚。

标签: c++windows

解决方案


推荐阅读