2017-03-19 5 views
1

私はtree.comを使用してC#programmで完全なディレクトリリストを取得しようとしています。処理が終わったら、結果をファイルとrichtextboxに出力する必要があります。tree.comは2938文字を処理した後に終了します

出力ストリームが2938文字で、まだ終了していない多くのディレクトリを処理した後、tree.comが停止するという問題が発生しました。

これはなぜこのような理由が考えられますか?

マイコード:事前に

try 
      { 
       Process proThis = new Process(); 
       ProcessStartInfo psiThis = new ProcessStartInfo("C:\\Windows\\System32\\cmd.exe", "/r tree C:\\"); 
       psiThis.RedirectStandardOutput = true; 
       psiThis.UseShellExecute = false; 
       proThis.StartInfo = psiThis; 
       proThis.Start(); 
       proThis.WaitForExit(); 
       if (File.Exists(".\\Dateileselog.zdlog")) 
       { 
        File.Delete(".\\Dateileselog.zdlog"); 
       } 

        string log = proThis.StandardOutput.ReadToEnd(); 
        sendMessage(log.Replace("ÃÄÄÄ", "").Replace("³ ", "-->").Replace("ÀÄÄÄ", "").Replace(" ", ""), f1, false); 

        StreamWriter writer = new StreamWriter(".\\Dateileselog.zdlog"); 
        writer.WriteLine(Base64Encode(log.Replace("ÃÄÄÄ", "").Replace("³ ", "-->").Replace("ÀÄÄÄ", "").Replace(" ", ""))); 
        writer.Close(); 
      } 
      catch (Win32Exception w) 
      { 
       sendMessage(w.Message, f1, false); 
       sendMessage(w.ErrorCode.ToString(), f1, false); 
       sendMessage(w.NativeErrorCode.ToString(), f1, false); 
       sendMessage(w.StackTrace, f1, false); 
       sendMessage(w.Source, f1, false); 
       Exception e = w.GetBaseException(); 
       sendMessage(e.Message, f1, false); 
      } 

ありがとう!

フィリップZocktan

答えて

0

この行を削除:

proThis.WaitForExit(); 

出力が制限されたサイズのバッファに置かれます。バッファがいっぱいになると、バッファに書き込もうとすると、バッファから読み込み、バッファにさらに入力するまで実行中のプロセスがブロックされます。

ReadToEnd()を使用すると、すべての出力テキストが確実に取得され、他のプロセスが停止した場合にのみ返されます。

+0

ありがとうございます!さて、それは動作します... –

+0

さて、ありがとう...お知りになりたい... –

関連する問題