2012-02-16 1 views
2

これを返すことはできませんが、現在のディレクトリにあるファイルのリストは期待していますが、何も返されません。c#コマンドラインを実行して文字列を返す

class Program 
{ 
    static void Main(string[] args) 
    { 
     PublishProject(); 
     Console.ReadLine(); 
    } 

    public static void PublishProject() 
    { 
     //Create process 
     var pProcess = new System.Diagnostics.Process 
     { 
      StartInfo = 
       { 
        FileName = "cmd.exe", 
        Arguments = "dir", 
        UseShellExecute = false, 
        RedirectStandardOutput = true, 
        WorkingDirectory = "C:\\" 
       } 
     }; 
     pProcess.Start(); 
     Console.Write(pProcess.StandardOutput.ReadToEnd()); 
     pProcess.Close(); 

     Console.WriteLine("done"); 
    } 
} 
+3

System.IOクラスを使用していない理由はありますか? –

答えて

8

あなたはにArgumentsを変更することで、この作業を行うことができます。

Arguments = "/C dir", 

/C Flag「の文字列で指定されたコマンドを実行してから停止します。」。これがなければ、のcmdがまだ実行中です。そのため、すぐに出力が得られないのです。

つまり、この例では、プロセスの代わりにDirectory.GetFilesまたはDirectory.EnumerateFilesを個人的に使用します。

+0

恐ろしいことに、私はそれが何か小さいと分かっていました! –

0

ディレクトリ内のファイルをダウンリストにしたい場合は、最良の方法は、次のようにSystem.IOからDirectoryクラスを使用することです:

using System.IO; 

string[] files = Directory.GetFiles(@"C:\"); 

// loop to display the filenames 
for (int i=0; i < files.Length(); i++) { 
    Console.WriteLine(files[i]); 
} 

*これはそれので、完全に動作するソースコードではないことに注意してくださいmain()機能は含まれていません。

関連する問題