C# - Как мне создать обычный ZIP-архив с помощью библиотеки 7-zip (т.е. не .7z, а .zip)?

это мой первый вопрос здесь, так что терпите меня.

То, что я собираюсь сделать, это просто создать базовый архив .zip на С#. Я попытался использовать встроенный класс GZipStream .NET, и мне удалось это сделать, но у меня возникла проблема, заключающаяся в том, что я не могу назвать файл «usercode.zip» без того, чтобы заархивированный файл потерял свое расширение. Из-за ограничений я не могу заставить свою программу создавать эти файлы как «usercode.trf.zip», что является единственным найденным мной способом оставить расширение имени файла нетронутым внутри архива.

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

Я наткнулся на библиотеку SevenZipHelper, которая предоставляет несколько отличных функций для использования библиотеки LZMA (или 7-zip) для сжатия файла.

Код, который я использую, выглядит следующим образом:

//Take the BF file and zip it, using 7ZipHelper
BinaryReader bReader = new BinaryReader(File.Open(pFileName, FileMode.Open));
byte[] InBuf = new byte[Count];

bReader.Read(InBuf, 0, InBuf.Length);
Console.WriteLine("ZIP: read for buffer length:" + InBuf.Length.ToString());

byte[] OutBuf = SevenZip.Compression.LZMA.SevenZipHelper.Compress(InBuf);

FileStream BZipFile = new FileStream(pZipFileName, FileMode.OpenOrCreate, FileAccess.Write);
BZipFile.Seek(0, SeekOrigin.Begin);
BZipFile.Write(OutBuf, 0, OutBuf.Length);
BZipFile.Close();

Это создает аккуратно сжатый файл, используя алгоритм 7-zip. Проблема в том, что я не могу гарантировать, что клиенты, использующие эту программу, будут иметь доступ к 7-zip, поэтому файл должен быть в обычном алгоритме zip. Я просмотрел вспомогательные библиотеки, а также библиотеки 7-zip, и кажется, что эту библиотеку можно использовать для сжатия файла с помощью обычного алгоритма «ZIP». Я просто не могу понять, как это сделать. Я заметил настройки свойств в нескольких местах, но я не могу найти документацию или поиск в Google, чтобы сказать мне, где это установить.

Я понимаю, что, вероятно, есть лучшие способы сделать это и что я просто что-то упускаю, но я не могу сидеть и бороться с такой якобы легкой задачей вечно. Любая помощь будет принята с благодарностью.


person DeVil    schedule 05.05.2011    source источник
comment
Вы можете просто использовать 7-Zip из командной строки, например: 7za a -tzip D:\myFile.zip D:\MyPath\*.*   -  person alex    schedule 05.05.2011
comment
Просто предположение, но тип сжатия, который вы выбрали, может быть проблемой... т.е. строка, содержащая SevenZip.Compression.LZMA, нет ли альтернативного сжатия для LZMA?   -  person Xander    schedule 05.05.2011


Ответы (1)