c++ - c/c++ 中平台独立的 glob 函数

标签 c++

<分区>

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

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

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

注意:Python 有一种非常可爱的方式来做到这一点:

glob(startDirectory)

注意:正在寻找一些在 Windows 和 Linux 中有效但没有提升 的实现 - 只是标准 c++,c.

最佳答案

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

  • 没有图书馆

  • 便携

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

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

注意事项

C 或 C++ 标准库中没有允许您列出目录内容的功能。如果您想进行 globbing,您必须使用特定于平台的代码。在这个问题上,您唯一的选择是您自己编写充满错误的代码,还是像其他人一样使用经过良好测试的库。

关于c++ - c/c++ 中平台独立的 glob 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16600006/

相关文章:

c++ - 模板化类中参数包的语法

c++ - 让 freeglut 库与 opengl 一起工作

c++ - 在 C++ 中对排列进行排序的最便宜的方法是什么?

c++ - 如何使用 Application Verifier 在我的代码中找到真正的问题行?

c++ - SDL 程序卡住

C++ : cout with a terenary if-statement

c++ - SendNotifyMessage 控制 Windows 监视器导致 IE 选项卡重新排序

c++ - 模板类成员函数的特化 - 在 Linux 上使用 g++-4.7

c++ - 将所有内容都放在 QApplication 的子类中有意义吗?

c++ - 为什么 enable_if 的行为不如预期?