【问题标题】:C++ execute same code on all files in a folderC ++对文件夹中的所有文件执行相同的代码
【发布时间】:2017-02-28 22:53:20
【问题描述】:

我已经上网很长时间了,我什至没有接近任何解决方案。对不起,如果这对专家来说似乎微不足道。

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

MyProgram filename1 filename2 

就我而言,我将所有文件从filename1filenameN 放在一个特定的文件夹中。 我想知道是否有任何方法可以输入文件夹名称,因此程序将在包含的所有文件上执行。

可能是这样的

Myprogram /Users/Whatever

或在窗口中

Myprogram C:\User\Whatever

提前致谢

【问题讨论】:

  • 考虑在代码中使用循环?
  • 使用Boost.Filesystem 遍历给定目录。 C++17 将有一个文件系统作为std的一部分
  • @CinCout 我不知道在代码内部使用循环将如何帮助读取文件夹中未知数量的文件。请给我一些想法好吗?
  • @WhiZTiM 我尝试安装 boost 并对其进行配置。但我以更复杂的问题结束。就像找不到文件甚至类似(架构 x86_64 的未定义符号)。我现在更迷茫了!

标签: c++ boost directory


【解决方案1】:

对于 linux,您可以使用带有诸如 YourProgram path/to/*.csv 之类的通配符参数的命令行,然后您会将与模式 path/to/*.csv 匹配的所有文件放入 argv 数组中。

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

【讨论】:

  • 感谢您的回答。
  • 感谢您的回答。但是,正如我在问题中提到的,我所有的文件都是二进制文件,所以它们没有任何扩展名。当我尝试 linux 的通配符时,它只读取第一个文件。
  • 在 linux 上,您将在 argv[1] 中获得第一个参数,在 argv[2] 中获得第二个参数,依此类推。你需要循环所有参数for (i=1; i<argc; i++)
【解决方案2】:

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

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

我个人不会修改代码本身来遍历文件,因为操作系统提供了一种机制。它使您的程序更加“单一职责”。如果您将输出发送到 stdout/cout,它允许您的程序在必要时与其他文本处理命令链接。

干杯

【讨论】:

    猜你喜欢
    • 2021-01-08
    • 2017-04-04
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2013-07-18
    相关资源
    最近更新 更多