2013-04-22 43 views
2

我想提取一個rar文件到一個位置。 問題是,rar文件包含4個文件夾,並且提取失敗。 我需要將我rar中的所有文件和文件夾提取到位置文件夾。 並提取不存在的文件。如何在c#winform應用程序中提取包含多個文件夾的rar文件

我迄今所做的:

Process winrar = new Process(); 
winrar.StartInfo.FileName = WinrarPath + @"\unrar.exe"; 
winrar.StartInfo.CreateNoWindow = true; 
winrar.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
winrar.EnableRaisingEvents = true; 
winrar.ErrorDataReceived += new 
DataReceivedEventHandler(winrar_ErrorDataReceived); 
string src = downloadFilPath; // directory , not the file itself 
string des = @"D:\" 
winrar.StartInfo.Arguments = string.Format("x -o+ {0} {1}", src, des); 
winrar.Start(); 
winrar.WaitForExit(); 

它的偉大工程,如果RAR文件只包含一個文件夾。 問題是一個rar文件包含多個文件夾。 也許它會幫助你爲我的問題提供一個解決方案。

謝謝, Shuki

+0

可能你可以簡單地嘗試先刪除目標文件夾? – duDE 2013-04-22 14:48:27

+0

如果您這樣做,則不在檔案中的文件將會消失。由於OP僅提到覆蓋現有文件(與檔案中的新對應文件),我不認爲這是他想要的。 – Mels 2013-04-22 15:11:08

+0

好的,我看,這是可能的 – duDE 2013-04-22 15:13:37

回答

4

使用命令行開關 「-o +」 來指定自動覆蓋。在你的榜樣,參數線將成爲:

winrar.StartInfo.Arguments = string.Format("x -o+ \"{0}\" \"{1}\"", src, des); 

但是,這取決於你如何便攜,可靠需要這個應用程序是,你可能要考慮使用本地.NET庫RAR等壓縮文件的處理。我過去成功使用的一個這樣的庫是SharpCompress

從WinRAR的幫助文件:

開關-O [+ | - ] - 設置覆蓋模式


此開關可用於既提取和更新存檔 時文件。提供以下模式:

-o詢問覆寫前(默認爲解壓文件)

-o +覆蓋所有(默認用於更新歸檔文件);

-o-跳過現有的文件。

+0

我試過這個論點。沒有工作 – subirshan 2013-04-22 18:14:52

+0

如果我的rar文件只包含一個工作文件夾。 但是如果它包含多個文件夾,這是一個問題 – subirshan 2013-04-22 19:13:06

+0

當你說「沒有工作」時,提到你得到的特定錯誤信息是非常有用的。如果我得到的所有反饋都是「問題」,我無法真正幫助您... – Mels 2013-04-23 06:59:46

相關問題