2012-12-13 45 views
1

我正在研究能夠在特定驅動器上找到PST的工具。這段代碼僅僅是爲了測試目的而採用了項目路徑。爲什麼這段代碼沒有收到外部命令的完整輸出?

我的問題是,當我試圖得到一個shell命令的執行輸出在外部指令的處理器,我只得到了2個第一行:

Process p = new Process(); 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.RedirectStandardOutput = true; 
p.StartInfo.FileName = "cmd.exe"; 
p.StartInfo.Arguments = "/C dir /s *.pst"; 
p.Start(); 
string output = p.StandardOutput.ReadToEnd(); 
MessageBox.Show(output); 
p.WaitForExit(); 

我的結果:

分冊驅動d是數據卷序列號是7C64-9650

預期結果:

分冊驅動d是數據卷序列號是d的7C64-9650

指南:\ PATH 13/12/2012下午一點49 1014047744 Archives.pst 4文件(一個或多個)1355919360個字節

沒有錯誤消息可用。

+0

我已經試過我的電腦上。工作正常。我看到「驅動器D中的卷是數據卷序列號是7CXX-XXXX」。但是我用Console.WriteLine(輸出)而不是MessageBox.Show(輸出) –

+0

不應該在'p.WaitForExit();'之後執行'string output = p.StandardOutput.ReadToEnd();' –

+1

@nick_w - 不,可能會導致死鎖。它在文檔中討論:http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardoutput.aspx –

回答

3

也許another way to skin the cat會更容易?你目前的代碼是不值得的麻煩。

// .Net 2.0 
string[] psts = Directory.GetFiles(".", "*.pst", SearchOption.AllDirectories); 

// .Net 4.0+ 
var psts = Directory.EnumerateFiles(".", "*.pst", SearchOption.AllDirectories); 

使用像這樣:

MessageBox.Show(String.Join(", ", psts)); 
+0

嘿,謝謝你的及時答覆。我試過了,它完美地工作..非常感謝! –

+1

@ user1902146:沒問題! .Net框架是巨大的,因此如果你覺得你需要運行另一個程序來完成一個目標,你可能不需要。訣竅是在MSDN中查找功能:) – user7116

相關問題