C # - Как мне создать обычный ZIP-архив, используя библиотеку 7-zip (т.е. не .7z, а .zip)? - PullRequest
4 голосов
/ 05 мая 2011

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

Что я собираюсь сделать, это просто создать базовый .zip-архив на C #.Я попытался использовать встроенный 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, чтобы сказать мне, где это установить.

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

1 Ответ

4 голосов
/ 05 мая 2011

Если вы хотите, чтобы вы могли взглянуть на эту библиотеку, я использовал ее раньше, и она довольно проста в использовании: dotnetzip

РЕДАКТИРОВАТЬ (пример):

 using (ZipFile zip = new ZipFile())
        {
            foreach (String filename in FilesList)
            {
                Console.WriteLine("Adding {0}...", filename);
                ZipEntry e = zip.AddFile(filename,"");
                e.Comment = "file " +filename+" added "+DateTime.Now;
            }
            Console.WriteLine("Done adding files to zip:" + zipName);
            zip.Comment = String.Format("This zip archive was created by '{0}' on '{1}'",
               System.Net.Dns.GetHostName(), DateTime.Now);

            zip.Save(zipName);
            Console.WriteLine("Zip made:" + zipName);
        }
...