сжатые файлы sharpziplib для внешнего распаковывания - PullRequest
2 голосов
/ 03 июня 2011

У меня есть сценарий, в котором я хочу сжать вложение электронной почты, используя SharpZipLib.Затем конечный пользователь откроет вложение и разархивирует вложенный файл.

Будет ли файл, изначально заархивированный с помощью SharpZipLib, легко распаковать другие программы для моего конечного пользователя другими пользователями?

1 Ответ

4 голосов
/ 03 июня 2011

Зависит от того, как вы используете SharpZipLib. Существует несколько способов сжатия данных с помощью этой библиотеки.

Вот пример метода, который создаст файл zip, который вы сможете открыть практически в любом приложении, поддерживающем zip:

private static byte[] CreateZip(byte[] fileBytes, string fileName)
{
    using (var memoryStream = new MemoryStream())
    using (var zipStream = new ZipOutputStream(memoryStream))
    {
        var crc = new Crc32();
        crc.Reset();
        crc.Update(fileBytes);

        var zipEntry =
            new ZipEntry(fileName)
            {
                Crc = crc.Value,
                DateTime = DateTime.Now,
                Size = fileBytes.Length
            };
        zipStream.PutNextEntry(zipEntry);
        zipStream.Write(fileBytes, 0, fileBytes.Length);
        zipStream.Finish();
        zipStream.Close();
        return memoryStream.ToArray();
    }
}

Использование:

var fileBytes = File.ReadAllBytes(@"C:/1.xml");

var zipBytes = CreateZip(fileBytes, "MyFile.xml");

File.WriteAllBytes(@"C:/2.zip", zipBytes);

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

...