【问题标题】:How can I enumerate all the file in a directory in POSIX/c c++?如何枚举 POSIX/c c++ 目录中的所有文件?
【发布时间】:2011-03-08 06:16:38
【问题描述】:

我需要枚举一个目录中的所有文件,然后导航到子目录并执行相同操作。

理想情况下,该算法应该在 linux macos [不再使用 windows(obsolete)] 上以相同的方式工作。

更新:我现在知道 VFS,但我对使用 VFS 枚举目录感到困惑。有什么建议吗?我应该打开一个目录作为文件吗?

【问题讨论】:

  • MS Windows 不符合 POSIX,但您可以使用 cygwin 来克服这个问题,并且相同的 GNU 库可以完成这项工作。

标签: c++ c unix posix vfs


【解决方案1】:

POSIX.1-2001 指定 opendirreaddirclosedirseekdirrewinddirtelldir。您的平台可能有说明如何使用它们的手册页。

据报道,MS 库不直接支持这些,而是​​显然更喜欢在那里使用 FindFirstFindNext,但据说有几个仿真库提供上述功能;你必须自己对这部分进行排序,因为我对 Win32 不是很熟悉。

【讨论】:

    【解决方案2】:

    如果您使用的是 GCC,您可以尝试文件系统接口。 在这里查看:GNU file system interface referemce

    【讨论】:

    • 大部分函数都是标准的,正如@Sdaz 的帖子所述,所以它们不是 GNU 独有的。
    【解决方案3】:

    您可以使用Boost Filesystem,它可移植到 Linux、Windows 和 MacOS。顾名思义,recursive_directory_iterator 将允许您递归地遍历目录。

    #include "boost/filesystem.hpp"
    #include <iostream>
    
    int main()
    {
        namespace fs = boost::filesystem;
        fs::recursive_directory_iterator end;
        for ( fs::recursive_directory_iterator dir("./"); dir != end; ++dir )
        {
           std::cout << *dir << std::endl;
        }
    }
    

    【讨论】:

    • 不完全是我问的,但它为我指明了一个有趣的选择!酷
    【解决方案4】:

    你应该在 Linux 上使用 getdents() 或 readdir()

    【讨论】:

      猜你喜欢
      • 2013-01-29
      • 1970-01-01
      • 2013-07-12
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多