2016-10-19 22 views
0

我一直在网上冲浪很长一段时间,我甚至没有接近任何解决方案。很抱歉,如果它似乎微不足道的专家。C++在文件夹中的所有文件上执行相同的代码

我有一个C++代码,它将一个二进制文件作为输入参数,执行一些计算然后输出一个.csv文件。 所以,我一直使用命令行通过一个或多个文件来执行代码,如下

MyProgram filename1 filename2 

在我的情况,我有我的特定文件夹中的所有文件filename1filenameN。 我想知道是否有任何方法输入文件夹名称,所以程序将在所有包含的文件上执行。

也许这样的事情

Myprogram /Users/Whatever 

或Windows类似

Myprogram C:\User\Whatever 

在此先感谢

+0

考虑在代码中使用循环? – CinCout

+3

使用[** Boost.Filesystem **](http://www.boost.org/doc/libs/1_62_0/libs/filesystem/doc/index.htm)遍历给定的目录。 C++ 17将有一个文件系统作为'std'的一部分@ – WhiZTiM

+0

@CinCout我不知道如何在代码中使用循环将有助于读取文件夹中未知数量的文件。请给我任何想法吗? – philippos

回答

1

对于Linux,您可以使用命令行与野生字符参数,如:YourProgram path/to/*.csv和你”将所有文件匹配到模式path/to/*.csv到argv数组中。

如果是windows,则可以使用一些Win API,如FindFirstFileFindNextFile来解析通配符并获取所有匹配文件。 you can also check this example

+0

感谢您的回答。 – philippos

+0

感谢您的回答。然而,正如我在我的问题中提到的,我所有的文件都是二进制文件,所以它们没有任何扩展名。当我尝试使用linux的通配符时,它只会读取第一个文件。 – philippos

+0

在linux上,你会在'argv [1]''argv [2]'中获得第二个arg,等等。你需要循环所有参数'for(i = 1; i SHR

0

在基于* nix的控制台上,“xargs”命令是您的朋友。例如

find ./MyDirectory -name "*.notcsv" | xargs myprogram

个人而言,我不会修改代码本身通过的文件为操作系统提供了一个机制来迭代。它使您的计划更“单一责任”。如果您将输出发送到stdout/cout,它将允许您的程序与其他文本处理命令链接在一起(如有必要)。

干杯

相关问题