实现独立于平台的Glob 我试图在C++中实现,或者 GOLB类似函数。
我已经有了一个将目录内容读取到实现独立于平台的Glob 我试图在C++中实现,或者 GOLB类似函数。,c++,cross-platform,C++,Cross Platform,我已经有了一个将目录内容读取到std::vector容器中的函数(我们将此函数称为ListDirectory()),因此我显然只需要stringmatching部分-我的问题: 实施时应该遵循什么样的理念 人们是否应该记住一些常见的问题 使用一个完整的regexp库(比如PCRE)或者更简单的模式匹配la Lua是否明智 如果使用简单模式匹配更好,是否已经有可用的函数/库/类(关于scanf和朋友呢) 如果您正在搜索独立于平台的通配符库, 例如,有一个图书馆 如果您是为了自学目的而检查模式匹配
std::vector
容器中的函数(我们将此函数称为ListDirectory()
),因此我显然只需要stringmatching部分-我的问题:
- 实施时应该遵循什么样的理念
- 人们是否应该记住一些常见的问题
- 使用一个完整的regexp库(比如PCRE)或者更简单的模式匹配la Lua是否明智
- 如果使用简单模式匹配更好,是否已经有可用的函数/库/类(关于
和朋友呢)scanf
希望这对我有所帮助,我使用这个:,以一种稍微适应的形式,在
*
中拒绝目录分隔符/
。如果您想要稍微调整的代码(为了好玩,我还将指针转换为字符串/迭代器))。它干净简单,不需要更多的花哨 您是否考虑过globs可以包含子目录?当glob类似于“*/*”
时,包含当前目录中所有文件的列表对您没有多大帮助。当然,除非您的ListDirectory
也递归地列出所有子目录的内容。但是在这种情况下,您的方法效率很低,因为它总是遍历目录树到最后,即使glob只有1或2级深度。另外:有什么原因让你实现这个功能而不是编写POSIX函数的包装器吗?编写一个RecursiveListDirectory
函数是很简单的,这将很容易满足*/*
@sepp2k的要求:因为我说的是实现glob(主要是为了更好地掌握所有与模式匹配相关的事情)。shwild需要使用STLSoft,这是一种危险的弃用软件(可能不会存在很长时间)。