2016-10-19 21 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,它將允許您的程序與其他文本處理命令鏈接在一起(如有必要)。

乾杯

相關問題