2016-10-19 12 views
0

私は本当に長い時間ネットをサーフィンしていましたが、私はこれに近い解決策にも至りませんでした。申し訳ありませんが、それは専門家にとっては些細なことです。C++はフォルダ内のすべてのファイルに対して同じコードを実行します

私は入力引数としてバイナリファイルを取るC++コードを持っていますが、何らかの計算が.csvファイルを出力します。 私は私の場合は

MyProgram filename1 filename2 

を以下のように、1つまたは複数のファイル上でコードを実行するコマンドラインを使用しているので、私は特定のフォルダにfilename1からfilenameNにすべての私のファイルを持っています。 フォルダ名を入力する方法があるかどうかを知りたいので、プログラムはすべてのファイルに実行されます。

たぶん、あなたは次のように野生の文字の引数を指定してコマンドラインを使用することができますLinux用の事前

+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

Myprogram C:\User\Whatever 

おかげのようなこの

Myprogram /Users/Whatever 

のようなものや窓で:YourProgram path/to/*.csvとあなた」 argv配列にパターンpath/to/*.csvと一致するすべてのファイルを取得します。

Windowsの場合、FindFirstFileFindNextFileなどのWin APIを使用して、ワイルドカード文字を解決し、すべてのマッチファイルを取得できます。 you can also check this example

+0

あなたの答えをありがとう。 – philippos

+0

あなたの答えをありがとう。しかし、私の質問で述べたように、私のファイルはすべてバイナリファイルなので、拡張子はありません。私がLinuxの野生の文字を試してみると、最初のファイルだけが読み込まれます。 – philippos

+0

Linuxでは、argv [1]の第1引数を 'argv [2]'の第2引数とします。すべての引数 'for(i = 1; i SHR

0

オン* nixベースのコンソールでは、 "xargs"コマンドはあなたの友人です。例えば

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

個人的に私は、オペレーティングシステムがメカニズムを提供して、ファイルを反復処理するコード自体を変更しないでしょう。それはあなたのプログラムをより "単一責任"にします。出力をstdout/coutに送ると、必要に応じてプログラムを他のテキスト処理コマンドと連鎖させることができます。

乾杯

関連する問題