3

有人知道可以等效于 python glob 函数的仅 ac/cpp 包吗?

基本上,我正在寻找这样的东西:

string startDirectory = "c:\foo\bar\*.txt"
vector<string> filename_list = getFilenameList(startDirectory)

注意:Python 有一个非常可爱的方法:

glob(startDirectory)

注意:寻找一些适用于Windows 和 Linux的实现,并且没有任何提升- 只是标准 c++,c。

4

1 回答 1

6

这是具有矛盾要求的问题之一:

  • 没有图书馆

  • 便携的

Boost 等库的主要功能之一是允许您编写可移植代码。您的另一个选择是编写一堆这样的代码:

#if defined _WIN32
#include <Windows.h>
std::vector<std::string> glob(const std::string &pattern)
{

}
#else
#include <glob.h>
std::vector<std::string> glob(const std::string &pattern)
{

}
#endif

你可能没有意识到可移植代码到底有多么痛苦。例如,std::ifstream如果您的用户将 Unicode 字符放在他们的文件名中,则在 Windows 上基本上会被破坏。这就是我们喜欢图书馆的原因。

笔记

C 或 C++ 标准库中没有允许您列出目录内容的功能。如果要进行通配,则必须使用特定于平台的代码。在这件事上,您唯一的选择是编写自己的漏洞百出的代码,还是像其他人一样使用经过良好测试的库。

于 2013-05-17T01:31:25.137 回答