2013-07-02 56 views
0

因此,我有一小段代碼可以檢測文件夾中的文件,並在它們變成特定時間後系統地將其壓縮。我現在正在編寫一段代碼,以根據用戶請求解壓縮某個日期範圍的文件以供軟件使用。在C#中通過Winzip解壓縮文件及其cmd擴展

我的問題是命令行字符串壓縮文件效果很好,但unzip不...下面是代碼片段摘要顯示我如何解壓,請讓我知道我應該採取什麼不同的方式來確保解壓縮。謝謝!

private void UnZipFile() 
     { 
      if (myRecord == null) 
      { 
       if (File.Exists(zipInfo.FullName)) 
       {       
        Process LogUnzipper = new Process(); 
        //32-bit system 
        if (File.Exists("c:\\Program Files\\WinZip\\WZZIP.exe")) 
        { 
         //WZZIP.exe being the WinZip executable 
         LogUnzipper.StartInfo.FileName = "c:\\Program Files\\WinZip\\WZZIP.exe"; 
        } 
        //64-bit system 
        else if (File.Exists("c:\\Program Files (x86)\\WinZip\\WZZIP.exe")) 
        { 
         //WZZIP.exe being the WinZip executable 
         LogUnzipper.StartInfo.FileName = "c:\\Program Files (x86)\\WinZip\\WZZIP.exe"; 
        } 
        //here is where I think I'm screwing up something.. 
        string action = "-e " + "\"" + zipInfo.FullName + "\"" + " \"" + zipInfo.DirectoryName + "\""; 
        //happen in background 
        LogUnzipper.StartInfo.CreateNoWindow = true; 
        LogUnzipper.StartInfo.UseShellExecute = false; 
        LogUnzipper.StartInfo.Arguments = action; 
        LogUnzipper.Start(); 
        while (!LogUnzipper.HasExited) 
        { 
         LogUnzipper.WaitForExit(500);// 1/2 sec 
        } 
        //adding break point at this line yields no unzipped Log file :(
       } 
       ... 

我的想法是,我莫名其妙地調用CMD錯在string action?即使如果我測試它在正確格式的Windows命令提示符。

***應該注意的是,ZipInfo.FullName是沿着ex:「C:\ Users \ 16208 \ Software \ Beta \ logs \ 6_2013 \ Log_10AM_to_11AM.zip」的東西,就formmat而言,所以我給精確的路徑到壓縮的項目。

+4

使用實際的C#ZIP庫。 – SLaks

+0

如何解釋? – DarthSheldon

+0

@DarthSheldon有多個.NET zip庫,如[DotNetZip](http://dotnetzip.codeplex.com/)和[SharpZipLib](http://www.icsharpcode.net/opensource/sharpziplib/)。這兩個選項都比運行WinZip更好(不僅僅是因爲最終用戶可能沒有安裝WinZip)。 – keyboardP

回答

0

您可以使用一些免費和開源的.Net庫進行壓縮和解壓縮(如建議的SLaks)。例如DotNetZip

using (ZipFile decompress = ZipFile.Read(ZipFilePath)) 
    {  
     foreach (ZipEntry e in decompress) 
     { 
      e.Extract(TargetPath, ExtractExistingFileAction.OverwriteSilently); 
     } 
    } 

至於你的代碼,等待半秒可能不足以完成解壓縮。您也可以嘗試在命令行中運行您的unzip命令並檢查輸出。

+0

基本上我必須使用Win-zip – DarthSheldon

+0

+1:DotNetZip岩石。它至少與WinZip或Zip/Unzip一樣快。 –

+0

沒關係,這是一個必需的軟件功能 – DarthSheldon

0

如果您有WinZip的安裝試試這個:

System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo("cmd", @"/c start winzip32 -e " + fileName + @" C:\SomeDirectory"); 
rocStartInfo.UseShellExecute = false; 
System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
proc.StartInfo = procStartInfo; 
proc.Start(); 
proc.WaitForExit(); 

其中FileName是您的* .rar文件的完整路徑。