c# создать архив 7z, затем не удается открыть имя файла .7z как архив

Я пытаюсь заархивировать некоторые папки. У них разные пути, они не будут принадлежать одному и тому же каталогу.

Я проверил аргументы командной строки, которые я бы дал, и они работают, но я не могу заставить их работать с С#:

string destination = "some path\\name.7z";
string pathToZip = "path to zip\\7z.exe";  // or 7za.exe
ProcessStartInfo p = new ProcessStartInfo();
p.FileName = pathToZip;
p.Arguments = "a \"" + destination + "\" \"";
// room for the foreach - but even one directory doesn't work right now
   p.Arguments += directoryPath + "\" \"";
p.Arguments += "\" -mx=9 -aoa";
Process x = Process.Start(p);

С 7z.exe я моргаю; С 7za.exe я получаю типичную zip-последовательность командной строки, когда файлы прокручиваются, добавляются в архив и создается архив.

Затем я иду к нему и щелкаю правой кнопкой мыши, открываю или дважды щелкаю... и понимаю, что это недопустимый архив (Can not open file "name.7z" as an archive). Попробуй через командную строку, с 7za, распаковать - то же самое.

Изменить: я нашел решение:

Моя проблема заключалась в опции -aoa (которую я использовал для перезаписи) — после ее удаления она заработала.


person Thalia    schedule 19.07.2012    source источник
comment
Что бы вы ни делали с p.Arguments, это какой-то отстой, и ни один человек не может прочитать это без внутренних кровотечений!   -  person banging    schedule 19.07.2012
comment
Согласованный. Я рекомендую здесь StringBuilder, так как вы выполняете конкатенацию строк внутри цикла for/foreach.   -  person neontapir    schedule 19.07.2012


Ответы (3)


Этот код работает для меня, упаковывает каталог с файлами внутри:

string destination = @"c:\my test.7z";
string pathToZip = @"C:\Program Files\7-Zip\7z.exe";
string directoryPath = @"c:\my test";

ProcessStartInfo p = new ProcessStartInfo();
p.FileName = pathToZip;
p.Arguments = string.Format("a -mx=9 \"{0}\" \"{1}\"", destination, directoryPath);

Process x = Process.Start(p);
person mj82    schedule 19.07.2012
comment
Только не забудьте добавить ", чтобы позаботиться о пробелах в путях. - person banging; 19.07.2012
comment
Действительно, забыл :). Я полагаю, что проблема автора заключалась в порядке аргументов: сначала опция, затем переключатели, затем имя архива и пути к каталогам/файлам. - person mj82; 19.07.2012
comment
Моя проблема заключалась в опции -aoa (которую я использовал для перезаписи)! после того, как я использовал ваш точный синтаксис и увидел, что он все еще не работает, я удалил его, и он заработал. - person Thalia; 20.07.2012

7za.exe — это программа командной строки, вы должны использовать ее в этом случае.

Почему вы добавляете "" в свою командную строку? Это может быть причиной вашей проблемы.

Кроме того, убедитесь, что вы кладете " вокруг вещей, а не дополняете двумя из них в конце, это только вызовет проблемы.

person Guvante    schedule 19.07.2012

Если командная строка работает, возможно, просто используйте другую функцию запуска; тот, что берет путь к exe, и параметры командной строки во втором параметре.

Посмотрите здесь.

Если командная строка работает, это может быть лучшим способом.

person strangefreeworld    schedule 19.07.2012