如何枚举 POSIX/c c++ 目录中的所有文件?
我需要枚举目录中的所有文件,然后导航到子目录并执行相同的操作。
理想情况下,该算法应该在 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
POSIX.1-2001 指定
opendir
、readdir
和linedir
、seekdir
、rewinddir
> 和telldir
。您的平台可能有描述如何使用它们的手册页。据报道,MS 库不直接支持这些,而是显然更喜欢使用 FindFirst 和 FindNext ,但据说有几个模拟库提供了上述功能;你必须自己对这部分进行排序,因为我对 Win32 不太熟悉。
POSIX.1-2001 specifies
opendir
,readdir
, andclosedir
,seekdir
,rewinddir
, andtelldir
. 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
andFindNext
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.如果您使用 GCC,则可以尝试文件系统接口。
在这里查看:GNU 文件系统接口参考
If you're using GCC, you can try the file system interface.
Check out here: GNU file system interface referemce
您可以使用 Boost 文件系统,可移植到 Linux、Windows 和 MacOS。 recursive_directory_iterator 将顾名思义,允许您递归地遍历目录。
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.
您应该在 Linux 上使用 getdents() 或 readdir()
You should use getdents() or readdir() on Linux