如何枚举 POSIX/c c++ 目录中的所有文件?

发布于 2024-10-20 22:23:39 字数 160 浏览 1 评论 0原文

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

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

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

I need to enumarate all the file in a dir and then navigate to the subdir and do the same.

Ideally the algorithm should work in the same way on linux macos [windows(obsolete) no more].

UPDATE: I'm now aware of VFS but I'm puzzled to use VFS for enumerate dir. Any suggestion ? Should I open a dir as file ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

韶华倾负 2024-10-27 22:23:39

POSIX.1-2001 指定 opendirreaddirlinedirseekdirrewinddir > 和 telldir。您的平台可能有描述如何使用它们的手册页。

据报道,MS 库不直接支持这些,而是​​显然更喜欢使用 FindFirst 和 FindNext ,但据说有几个模拟库提供了上述功能;你必须自己对这部分进行排序,因为我对 Win32 不太熟悉。

POSIX.1-2001 specifies opendir, readdir, and closedir, seekdir, rewinddir, and telldir. Your platform likely has man pages describing how to use them.

These are reportedly not supported directly by MS libraries, instead apparently preferring to use FindFirst and FindNext over there, but there's supposedly several emulation libraries that provide the above; you'll have to sort that part on your own, as I'm not very familiar with Win32.

归途 2024-10-27 22:23:39

如果您使用 GCC,则可以尝试文件系统接口。
在这里查看:GNU 文件系统接口参考

If you're using GCC, you can try the file system interface.
Check out here: GNU file system interface referemce

毁梦 2024-10-27 22:23:39

您可以使用 Boost 文件系统,可移植到 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;
    }
}

You can use Boost Filesystem, which is portable to Linux, Windows, and MacOS. The recursive_directory_iterator will allow you, as the name implies, to iterate recursively through a directory.

#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;
    }
}
暖树树初阳… 2024-10-27 22:23:39

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

You should use getdents() or readdir() on Linux

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文