【问题标题】:Get an ordered list of files in a folder获取文件夹中文件的有序列表
【发布时间】:2015-09-08 02:14:53
【问题描述】:

我使用boost::filesystem::directory_iterator 将所有可用文件的列表放入给定文件夹中。

问题是我认为这种方法会按字母顺序给我文件,而结果似乎很随机。

有什么奇特的按字母顺序排序的方法吗?

我当前的代码:

if(boost::filesystem::is_directory(myFolder)){
    // Iterate existing files
    boost::filesystem::directory_iterator end_iter;
    for(boost::filesystem::directory_iterator dir_itr(myFolder);
        dir_itr!=end_iter; dir_itr++){

        boost::filesystem::path filePath;
        // Check if it is a file
        if(boost::filesystem::is_regular_file(dir_itr->status())){
            std::cout << "Reading file " << dir_itr->path().string() << std::cout;
        }
    }
}

【问题讨论】:

  • 不是很花哨,但应该可以:将它们放在一个向量中并对向量进行排序。
  • 当您需要以更复杂的方式对它们进行排序时,问题会变得更糟。例如:如果您需要根据文件头中的某些信息对它们进行排序,则必须一个一个地打开文件 -> 读取标题 -> 关闭文件。然后,对文件进行排序。最后,您将不得不开始另一个循环打开每个文件以读取数据记录

标签: c++ boost boost-filesystem


【解决方案1】:

我见过的执行您想要的最奇特的方式是直接来自 boost filesystem 教程。在this 特定示例中,作者将文件名/目录附加到向量,然后利用std::sort 确保数据按字母顺序排列。您的代码可以轻松更新以使用相同类型的算法。

【讨论】:

    【解决方案2】:

    直接来自 boost 文件系统教程。

    感谢 Tyler 提供的链接。

    如果你很懒,这里是改编的代码:

    std::vector<std::filesystem::path> files_in_directory;
    std::copy(std::filesystem::directory_iterator(myFolder), std::filesystem::directory_iterator(), std::back_inserter(files_in_directory));
    std::sort(files_in_directory.begin(), files_in_directory.end());
    
    for (const std::string & filename : files_in_directory) {
        std::cout << path.string() << std::endl; // printed in alphabetical order
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      • 2011-01-15
      • 1970-01-01
      • 2017-02-25
      相关资源
      最近更新 更多