【发布时间】:2013-01-29 07:11:42
【问题描述】:
我需要枚举文件夹中的所有文件,然后导航到子文件夹并执行相同操作(递归?当然)。
理想情况下,算法应该在 linux 和 macos 上以相同的方式工作
免责声明:我在 POSIX 上提出了类似的问题:我现在知道 VFS,但我对使用 VFS 枚举目录感到困惑。有什么建议吗?我应该打开一个目录作为文件吗?唯一的方法是使用像 qt 这样的库跨平台?
更新:所以没有 VFS 方式来处理目录? “*V*irtual *F*ile *S*ystem 提供了用于访问各种不同文件系统的单一 API”但无法枚举目录。
“readdir”等解决方案可以解决任何类型的 *NIX 问题吗?在 Windows 上没有什么比巨大的 MingW 库更好的了?或部分实现仅在一些胜利上工作,例如: https://github.com/xbmc/xbmc/blob/master/tools/TexturePacker/Win32/dirent.c
BOOST 似乎是一个非常酷的解决方案,但它既复杂又学术。无论如何,谢谢
最后更新:
我找到了更多文档,现在一切都更加清晰了。
这个问题是重复的!
opendir() 和 readdir() 是 linux 上枚举和浏览目录的解决方案。如我的示例所示,将它们映射到 Windows 上非常容易(但是不相关的 windowz fs 使一切变得奇怪)并且 ntfw() 更加有用。
VFS(虚拟文件切换)是一个内核特性,它通过为文件系统操作创建一个抽象层来解决这个问题。此处关闭文档:linux programming interface
谢谢!
【问题讨论】:
-
不是真正的骗子,因为 C++ 可能有更好的选择。
-
您在寻找 C++ 还是 C?要么选择一个,要么在你的问题中解释为什么你需要两者。
-
我对一个简单易用的 C 解决方案很感兴趣,我将把它包装在一个 cpp 容器中。为了更好地理解,我在这里的单个 c 文件中创建了一个带有简单 windows 测试的快速 github 项目:github.com/maborg/scandir 随时 fork 修改。只是为了好玩(相关的c文件在这里:github.com/maborg/scandir/blob/master/scandir/readdir.c)
-
我也试图了解是否有“标准”解决方案(VFS?)
-
旁白:你能提供一个 VFS 的链接吗?我想更新标签 wiki。具体来说,你指的是commons.apache.org/vfs吗?