【问题标题】:C++ How to get folder information such as names and sizesC++ 如何获取文件夹信息,例如名称和大小
【发布时间】:2018-04-22 19:09:15
【问题描述】:

我需要制作一个程序,该程序将输出与可执行文件位于同一目录中的所有文件夹和文件夹大小,当您通过命令提示符执行它时,它应该显示与可执行文件位于同一目录中的所有文件夹例如,它。 c++程序完成的可执行文件将能够移动到documents文件夹中,当您通过命令提示符执行文件时,将输出documents文件夹中的所有文件夹。我所知道的是,我可能必须制作一个向量或某种容器来保存文件夹名称和文件夹大小并使用范围 for 循环输出它,还有命令行参数可用于修改输出信息,例如文件夹按字母顺序排序等等。我应该能够做到这一点,我只是不知道如何在 C++ 中提取文件夹信息。如果我知道如何准确获取文件夹名称和大小,我就可以开始做剩下的事情了。任何有关如何执行此操作的帮助将不胜感激。

【问题讨论】:

  • 虽然 C++ 可以提​​供容器来保存文件夹(目录)名称,但 C++ 没有可使用的本机目录处理函数(直到 C++17)。相反,您将使用结构类型为dirent 的C opendirreaddir 函数。手册页提供了有关如何获取目录名称的最少示例。如果您将它们存储在字符串向量中,那么您将拥有所有正常的排序和访问功能。
  • 查看此内容:en.cppreference.com/w/cpp/filesystem 如果您在此处找不到所需内容,则可能需要操作系统特定的 API。如果您这样做,请使用该信息更新您的问题。 Boost 还有一个文件系统库:boost.org/doc/libs/1_66_0/libs/filesystem/doc/index.htm
  • 哦,我在执行此操作时无法使用 3rd 方库。有没有办法在不下载第三方库的情况下做到这一点?
  • 请定义第三方库。如果您对可能的解决方案有限制,则应将其包含在问题中,以避免人们浪费时间。
  • 对不起,我应该早点澄清一下,我之前有点困惑,但现在我相当有信心我应该使用文件系统库。

标签: c++ command-line-arguments directory


【解决方案1】:

你想做的大部分事情都可以在 C++17 中使用std::filesystem 来完成

您可以使用current_path() 获取当前路径,然后您可以使用directory_iterator() 遍历目录中包含的所有内容。 file_size() 可用于获取文件的大小。

auto path = std::filesystem::current_path();
for (auto& obj : std::filesystem::directory_iterator(path)) {
    // Get size of files
    if (!std::filesystem::is_directory(obj)) {
        auto size = std::filesystem::file_size(obj);
    }
    // Do other things
    // ...
}

如果你能够使用 C++17 std::filesystem 绝对是最好的选择。

【讨论】:

  • 我拿出了!在您的 if 语句中,因为我只想包含文件夹,但似乎在我这样做之后我无法在 x 上调用 file_size ?也谢谢你,这对我帮助很大。
  • 只能获取文件的文件大小,不能获取目录。要获取目录的大小,您需要递归地对目录中所有文件的大小求和。
  • 您可以尝试查看this question 以获取有关查找目录大小的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-28
  • 2012-08-23
  • 1970-01-01
  • 2012-10-24
  • 2014-06-22
  • 2020-09-21
  • 1970-01-01
相关资源
最近更新 更多