2016-04-19 14 views
0

私のプログラムでdir /s C:\ /b > temp.txtというコマンドを使用しようとしています。私はコマンドラインで試してみましたが、それは常に動作しますが、私のプログラムで試してみると、私のプログラムのファイルとフォルダが得られます。Visual C++で `dir`コマンドを正しく呼び出す方法は?

picture

私は、Visual C++およびコマンドsystem("dir /s C:\ /b > temp.txt");を使用しています。自分のプログラムで何かが間違っていることは知っていますが、私は何がわかりません。

+0

:https://msdn.microsoft.com/en-us/library/windows/desktop/aa365200(v=vs:あなたは上の鐘で、プログラム的に自分自身を実装することができます。 85).aspx – kfsone

答えて

2
あなたが実際について尋ねているもの

あまり明確ではなく、確かに私が知っている一つのことは、あなたがリテラル文字列にバックスラッシュ文字をエスケープする必要があるということです:

system("dir /s C:\\ /b > temp.txt"); 
       //^

またraw string literalを提供

system(R"x(dir /s C:\ /b > temp.txt)x"); 
0

あなたの問題は、\が食べられることです。あなたは実行する必要があります。

system("dir /s C:\\ /b > temp.txt"); 

\は、あなたが(あなたが行うにはしたくない)エスケープ文字を使用しようとしているので、あなたがC(または、あなたのケースでを伝えるために余分な\を与えるしなければならないことを意味しますC + +)は、実際にはリテラルが必要です。

0

エスケープ文字に関する他の言葉に加えて、Visual Studioからプログラムを実行しているときの現在の作業ディレクトリは、おそらくプロジェクトが存在するディレクトリです。必要に応じてこれを変更するためのデバッグのプロパティには設定があります。ネイティブC++を使用している場合は、現在の作業ディレクトリを変更したり、ディレクトリの内容を取得したりするためのWindows API呼び出しもあります。 CLRを使用する場合は、同じことを達成するための他の手段があります。

system()を使用するのは、実際のプロジェクトで望ましい結果を得るための最良の手段ではないでしょう。

Windows APIを使用すると、醜いCコードが生成されますが、std :: stringを使用する関数を公開するユーティリティライブラリにこのコードを書き込むことができます。

ここにスタート:脇https://msdn.microsoft.com/en-us/library/windows/desktop/aa365200(v=vs.85).aspx

関連する問題