Как извлечь файл rar, содержащий несколько папок, с перезаписью в приложении С# winform

Я хочу извлечь файл rar в папку . Дело в том, что файл rar содержит 4 папки, и извлечение не удается. Мне нужно извлечь все файлы и папки в моем 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 содержит более одной папки. Может быть, это поможет вам дать мне решение моей проблемы.

Спасибо, Шуки


person subirshan    schedule 22.04.2013    source источник
comment
Может быть, вы можете просто попробовать сначала удалить папку назначения?   -  person Leo Chapiro    schedule 22.04.2013
comment
Если вы это сделаете, файлы, которых нет в архиве, исчезнут. Поскольку ОП говорит только о перезаписи существующих файлов (их новыми аналогами из архива), я не думаю, что он этого хочет.   -  person Mels    schedule 22.04.2013
comment
А, хорошо, я вижу, это возможно   -  person Leo Chapiro    schedule 22.04.2013


Ответы (1)


Используйте переключатель командной строки «-o+», чтобы указать автоматическую перезапись. В вашем примере строка аргументов станет:

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

Однако, в зависимости от того, насколько переносимым и надежным должно быть это приложение, вы можете рассмотреть возможность использования собственной библиотеки .NET для RAR и другой обработки архивов. Одной из таких библиотек, которую я успешно использовал в прошлом, является SharpCompress.

Из файла справки WinRAR:

Переключатель -O[+|-] — установить режим перезаписи


Этот переключатель можно использовать как при извлечении, так и при обновлении архивных файлов. Доступны следующие режимы:

-o Спрашивать перед перезаписью (по умолчанию для извлечения файлов)

-o+ Перезаписать все (по умолчанию для обновления заархивированных файлов);

-o- Пропустить существующие файлы.

person Mels    schedule 22.04.2013
comment
если мой файл rar содержит только одну папку, он работает. но если он содержит несколько папок, это проблема - person subirshan; 22.04.2013
comment
Когда вы говорите, что это не сработало, очень полезно упомянуть конкретное сообщение об ошибке, которое вы получаете. Я не могу вам помочь, если все отзывы, которые я получаю, являются проблемой... - person Mels; 23.04.2013
comment
Я отредактировал свой ответ, включив двойные кавычки вокруг исходного и целевого пути. Что касается вашего комментария о том, что вы не работаете с несколькими папками, вы действительно пытались выполнить операцию вручную с помощью командной строки, прежде чем имитировать операцию с С#? В тех редких случаях, когда выполнение внешнего исполняемого файла из вашего кода C# является лучшим решением, я обнаружил, что вручную вводить команду и наблюдать за тем, что происходит, гораздо меньше неприятностей. - person Mels; 23.04.2013