2013-08-24 73 views
0

我有一個程序,我有一個.exe文件。 .exe的工作是掃描目錄中損壞的文件。如果通過命令提示符按以下格式訪問我得到的掃描如何使用c#命令提示符並逐行獲取結果?

「文件或文件夾「EXE的位置」,結果被掃描」

結果我得到的是作爲掃描的推移。像

D:\A scanned 
D:\B scanned 
D:\C scanned 
D:\D scanned 

現在的問題是如何能夠通過我行使用C#得到的結果一致。

我使用下面的代碼集,我只得到最終結果。我需要通過線輸出線

的代碼如下:

 string tempGETCMD = null; 
     Process CMDprocess = new Process(); 
     System.Diagnostics.ProcessStartInfo StartInfo = new System.Diagnostics.ProcessStartInfo(); 
     StartInfo.FileName = "cmd"; //starts cmd window 
     StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
     StartInfo.CreateNoWindow = true; 
     StartInfo.RedirectStandardInput = true; 
     StartInfo.RedirectStandardOutput = true; 
     StartInfo.UseShellExecute = false; //required to redirect 
     CMDprocess.StartInfo = StartInfo; 
     CMDprocess.Start(); 
     System.IO.StreamReader SR = CMDprocess.StandardOutput; 
     System.IO.StreamWriter SW = CMDprocess.StandardInput; 
     SW.WriteLine("@echo on"); 
     SW.WriteLine(@"E:\Scanner\Scanner.exe -r E:\Files to be scanned\"); //the command you wish to run..... 


     SW.WriteLine("exit"); //exits command prompt window 
     tempGETCMD = SR.ReadToEnd(); //returns results of the command window 
     SW.Close(); 
     SR.Close(); 
     return tempGETCMD; 

在這個任何幫助apprecitated

感謝,

回答

1

我認爲你必須使用一個專用的線程從StandardOutput流中讀取每條新行,例如:

//This will append each new line to your textBox1 (multiline) 
    private void AppendLine(string line) 
    { 
     if (textBox1.InvokeRequired){ 
      if(textBox1.IsHandleCreated) textBox1.Invoke(new Action<string>(AppendLine), line); 
     } 
     else if(!textBox1.IsDisposed) textBox1.AppendText(line + "\r\n"); 
    } 
    //place this code in your form constructor 
    Shown += (s, e) => { 
     new Thread((() => 
     {   
     while (true){ 
      string line = CMDProcess.StandardOutput.ReadLine(); 
      AppendLine(line);  
      //System.Threading.Thread.Sleep(100); <--- try this to see it in action 
     } 
    })).Start(); 
    }; 
    //Now every time your CMD outputs something, the lines will be printed (in your textBox1) like as you see in the CMD console window.  
+0

嗨King King,我嘗試過。但你能告訴什麼是「中顯示」 我一定後 SW.WriteLine應用代碼(@「E:\掃描儀\ Scanner.exe -r E:\文件被掃描\」); 我不知道如何去做這件事?你能幫忙嗎? – Vikneshwar

+0

@Vikneshwar'顯示+ =(s,e)'是註冊'顯示'事件處理程序,您可以將它放在窗體構造函數中。顯示後,可以調用'SW.WriteLine(@「E:\掃描儀\ Scanner.exe -r E:\文件被掃描\」);'只要你想,如的一個'Click'事件處理程序'Button'。 –

+0

噢,抱歉金敬我忘了迴響應。最終我做到了,完成了我的任務。謝謝 – Vikneshwar

相關問題