Добавление бинарного файла в архив - PullRequest
0 голосов
/ 10 мая 2018

Мне нужно добавить существующий двоичный файл в архив. Я нашел пример, но он хорош только для текстовых файлов. Как я могу сделать это с бинарным, скажем, PDF? Вот код для текстового файла.

using (FileStream zipToOpen = new FileStream(@"c:\users\exampleuse\release.zip", FileMode.Open))
        {
            using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
            {
                ZipArchiveEntry readmeEntry = archive.CreateEntry("Readme.txt");
                using (StreamWriter writer = new StreamWriter(readmeEntry.Open()))
                {
                        writer.WriteLine("Information about this package.");
                        writer.WriteLine("========================");
                }
            }
        }

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

Вам просто нужно использовать BinaryWriter для добавления двоичных данных. Ниже приведен пример для байта []. Чтобы получить эти данные, вы можете прочитать существующий файл, получить выходные данные библиотеки генерации PDF и т. Д. В целом вы можете просто взять любой поток.

using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
{
    ZipArchiveEntry readmeEntry = archive.CreateEntry("test.dat");
    byte[] someData = {10, 20, 30};
    using (BinaryWriter writer = new BinaryWriter(readmeEntry.Open()))
    {
        writer.Write(someData);
    }
}
0 голосов
/ 10 мая 2018

В примере показано, как создать StreamWriter и записать данные в запись архива.Поскольку StreamWriter предназначен для текста, вам необходимо получить доступ к потоку или использовать другой модуль записи для двоичного файла.Ниже приведен краткий пример того, как прочитать желаемый двоичный файл и записать байты в поток аналогичным способом.

    string fileToZipPath = @"c:\users\exampleuse\binaryfile.exe"; 

    using (FileStream zipToOpen = new FileStream(@"c:\users\exampleuse\release.zip", FileMode.Open))
    {
        using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
        {
            ZipArchiveEntry readmeEntry = archive.CreateEntry("BinaryFile.exe");
            using (Stream writer = readmeEntry.Open())
            {
                using (FileStream fileToCompress = new FileStream (fileToZipPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                {
                    fileToCompress.CopyTo(writer);
                }
            }
        }
    }
0 голосов
/ 10 мая 2018

Вы можете просто открыть файл и записать прямо в поток записи zip:

ZipArchiveEntry readmeEntry = archive.CreateEntry("asd.pdf");
using (var stream = readmeEntry.Open())
using (var file = File.OpenRead(@"C:\somewhere\asd.pdf"))
{
    file.CopyTo(stream);
}

Это работает для любого типа файла, просто убедитесь, что расширение соответствует.

...