2013-04-22 45 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

相关问题