我想使用匹配某些普通的glob作为主要参数的所有文件。
例如,如果我需要浏览文件夹“X”中的所有txt文件,我想在命令提示符中启动我的程序,如my_prog C:\X\*.txt
我该如何管理?
答案 0 :(得分:0)
您在示例中使用的星号*
不是您的程序的一部分。
管理它是 OS 的责任!这将是WildCard
实际上,您希望在代码中使用2
个参数。一个用于路径,另一个用于正则表达式。
您应该将这两个参数放入主程序中,然后将它们削减。
#include <iostream>
int main(int argc, char** argv) {
std::cout << argv[ 1 ] << ": " << argv[ 2 ] << std::endl;
}
<强>输入强>
program folder *.txt
<强>输出强>
folder: *.txt
现在您认为如何实施可以浏览目录中所有文件的算法,而不是找到匹配的一个
答案 1 :(得分:0)
关于此:Globbing in C++/C, on Windows
我已将setargv.obj
链接到我的项目,它完全有效:
for (int i = 1; i < argc; i++) {
std::cout << argv[i] << '\n';
}
答案 2 :(得分:0)
在C ++ 17中,有一个新的标准<filesystem>
库,可帮助以可移植的方式为Unix风格和Windows风格的操作系统操作路径和文件名。
Windows(以及其他操作系统,如VMS)提供程序可以调用的API,以将通配文件规范转换为实际文件名。在Windows中执行此操作的传统方法是使用FindFirstFile和FindNextFile。这里的权衡是人们经常搞乱使用这个API迭代文件的代码。有很多方法可以解决它。
C ++ 17 <filesystem>
库提供了目录迭代器(常规和递归),它应该使用操作系统的API正确地抽象出许多细节。
答案 3 :(得分:-1)
for %%a in (c:\x\*.txt) do my_prog %%a
这适用于直接命令行。如果您使用.BAT文件,请使用%a
代替%%a
。 for
循环将找到所有文件,并为每个文件调用my_prog
。