2008-11-03 49 views
2

我的C#應用​​程序裏面我運行的7z壓縮過程變成它的目錄如何從7Z命令行過程獲得更多的錯誤信息

存檔位於在%TEMP%目錄中隨機命名的目錄中提取存檔例如

C:\ Documents和Settings \用戶\本地 設置\溫度\ vtugoyrc.fd2

(fullPathFilename =「C:\ Documents和Settings \用戶\本地設置的\ Temp \ vtugoyrc .fd2 \ xxx.7z「)

我的代碼是:

sevenZipProcessInfo.FileName = SEVEN_ZIP_EXECUTABLE_PATH; 
sevenZipProcessInfo.Arguments = "x " + fullPathFilename; 
sevenZipProcessInfo.WindowStyle = ProcessWindowStyle.Hidden; 
sevenZipProcessInfo.UseShellExecute = true; 
sevenZipProcessInfo.WorkingDirectory = Path.GetDirectoryName(fullPathFilename); 
Process sevenZipProcess = Process.Start(sevenZipProcessInfo); 
if (sevenZipProcess != null) 
{ 
    sevenZipProcess.WaitForExit(); 
    if (sevenZipProcess.ExitCode != 0) 
     ...exit code is 2 (fatal error by the 7z help) 

我在哪裏可以找到更詳細的資料?

回答

5

您在這裏使用7 Zip作爲外部進程。它相當於直接從命令行調用命令。

你有沒有考慮過使用實際的庫來壓縮/解壓你的文件。你可以在你的C#項目中引用的東西。

Sharp Zip Lib是相當不錯的,但也給予了繼承人使用7zip壓縮

+0

但是我選擇不走那條路,因爲至少有標準7z格式的庫提供的文件級荏苒只有W/O歸檔多個文件合併成一個 – Hanan 2009-12-18 13:33:00

2

假設過程標準錯誤寫入錯誤/標準輸出,你可以設置UseShellExecute爲false,並重定向標準輸出/標準錯誤特定wrapper library;在MSDN here(stderr)和here(stdout)上有一個示例。

如果你需要從兩個標準錯誤標準輸出,使用WaitForExit()閱讀,然後事情就變得更加有趣 - 通常包括一個或者幾個線程,或者異步方法。

另外一個最終選擇是使用管重定向在命令 - 即1>out.txt 2>&1 - 此管標準輸出到out.txt,和管道stderr的成標準輸出,所以這也進入out.txt。然後從out.txt讀取。

+0

的方式我得到錯誤信息指出我的問題只是使用命令行(cmd)運行相同的事情。 – Hanan 2008-11-03 13:55:05

相關問題