【问题标题】:How can I speed up this directory listing function?如何加快此目录列表功能?
【发布时间】:2020-12-11 09:25:49
【问题描述】:

我使用以下代码列出驱动器的文件。它有效,但速度很慢。 如何加快速度?

void l(string& foldername, vector<string>& output) {
    DIR* dir;
    struct dirent* DirEntry;

    if ((dir = opendir(foldername.c_str())) != NULL)
    {
        while ((DirEntry = readdir(dir)) != NULL)
        {
            if (strcmp(DirEntry->d_name, ".") && strcmp(DirEntry->d_name, ".."))
            {
                string subfolder(foldername);
                subfolder += "\\";
                subfolder += DirEntry->d_name;
                DIR* subdir;
                if ((subdir = opendir(subfolder.c_str())) != NULL)
                {
                    l(subfolder, output);
                    closedir(subdir);
                }
                else
                {
                    string fullname(foldername);
                    fullname = fullname + '\\' + DirEntry->d_name;
                    output.push_back(fullname);
                }
            }
        }
        closedir(dir);
    }
    else
    {
    }
}

【问题讨论】:

    标签: c++


    【解决方案1】:

    如果您使用的是最新的 C++ 标准 (>=C++17),您可以简单地使用 std::filesystem。在std::filesystem::recursive_directory_iterator(path) 的帮助下,它的方式更简单,您可以用更少的代码行来实现您想要的。

    关于速度,我猜它不是最快的实现,因为它在标准库中。例如:

    https://en.cppreference.com/w/cpp/filesystem/recursive_directory_iterator

    【讨论】:

      猜你喜欢
      • 2011-10-07
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 2016-12-20
      相关资源
      最近更新 更多