C++ C++;多个文件以公共名称开头
有没有办法打开以公用名称开头的文件,而不指定其全名和数量?它们应该一个接一个地打开,而不是一下子全部打开。 例如,我有以下文件: certainstr_123.txt、certainstr_5329764.txt、certainstr_1323852.txt 或者,也许用另一种语言更容易做到?C++ C++;多个文件以公共名称开头,c++,file,boost,glob,C++,File,Boost,Glob,有没有办法打开以公用名称开头的文件,而不指定其全名和数量?它们应该一个接一个地打开,而不是一下子全部打开。 例如,我有以下文件: certainstr_123.txt、certainstr_5329764.txt、certainstr_1323852.txt 或者,也许用另一种语言更容易做到? 谢谢。C++没有定义以那种方式列出文件的标准方式 最好的跨平台方法是使用模块之类的库。我认为boost::filesystem没有通配符搜索,您必须自己过滤文件,但这并不困难 您可以使用正则表达式,就像在
谢谢。C++没有定义以那种方式列出文件的标准方式 最好的跨平台方法是使用模块之类的库。我认为
boost::filesystem
没有通配符搜索,您必须自己过滤文件,但这并不困难
您可以使用正则表达式,就像在另一个答案中一样(这是完美的解决方案)。
检查文件扩展名(i->path().extension()
)和以“certainstr”开头的文件名(boost::start_with
或std::string::substr
)可能就足够了。
如果选择C++11标准正则表达式库,请确保具有最新的libstdc++
有许多特定于系统的功能。例如,见:
list.txt
输出文件(当然这是一种黑客行为)
无论如何,根据您的需要,基于Python(或基于脚本)的解决方案可能更简单(另请参见):
或者:
files = [f for f in os.listdir('.') if re.match(r'certainstr_\d+.txt', f)]
这是Python的等价物,我建议只使用正则表达式。伪代码:
boost::regex reg("^certainstr_\\d+.txt$");
for(recursive_directory_iterator it("."); it != recursive_directory_iterator(); ++it)
{
if(boost::regex_search(it->string(), reg))
{
cout << *it << endl;
}
}
boost::regex reg(“^certainstr\\ud+.txt$”;
for(递归目录迭代器it(“.”;it!=递归目录迭代器();++it)
{
if(boost::regex_搜索(it->string(),reg))
{
难道不是有很多“密切的参考”,但没有什么真正的答案(简单的示例不过滤模式,链接的答案明确是特定于平台的,黑客……疯狂的黑客)。提到python是……嗯,我想OP是这样要求的:/@sehe谢谢你的观察。我添加了一些代码并更改了一个链接。等等。这里发生了什么事?你添加了我5小时前发布的代码示例,我得到了否决票。你知道,我很高兴你修改了你的答案。@sehe双重抱歉:否决票不是我的,读你的答案时,我确信你使用的是C++11正则表达式,不是boost。是时候暂停了;)注意:这个术语是globbing(或“shell globs”)。另外,你不想只使用“公共名称开头”(顺便说一句,它被称为前缀)。毕竟,还有公共后缀。
[glob.glob('certainstr_*.txt')][3]
files = [f for f in os.listdir('.') if re.match(r'certainstr_\d+.txt', f)]
boost::regex reg("^certainstr_\\d+.txt$");
for(recursive_directory_iterator it("."); it != recursive_directory_iterator(); ++it)
{
if(boost::regex_search(it->string(), reg))
{
cout << *it << endl;
}
}