Предполагается ли, что DeflateStream создает заархивированный поток, который можно хранить как стандартный архив .zip?
Я пытаюсь создать zip в памяти (для удаленной отправки) из локального файла. Я использовал DeflateStream, чтобы получить сжатый массив байтов из файла на локальном диске:
public static byte[] ZipFile(string csvFullPath)
{
using (FileStream csvStream = File.Open(csvFullPath, FileMode.Open, FileAccess.Read))
{
using (MemoryStream compressStream = new MemoryStream())
{
using (DeflateStream deflateStream = new DeflateStream(compressStream, CompressionLevel.Optimal))
{
csvStream.CopyTo(deflateStream);
deflateStream.Close();
return compressStream.ToArray();
}
}
}
}
Это прекрасно работает. Однако, когда я выгружаю полученные байты в zip-файл:
byte[] zippedBytes = ZipFile(FileName);
File.WriteAllBytes("Sample.zip", zippedBytes);
Я не могу открыть полученный архив .zip с помощью встроенных в Windows функций .zip (или с помощью любого другого стороннего инструмента для архивирования).
Альтернативой, которую я планирую сейчас, является использование ZipArchive, однако это потребует создания временных файлов на диске (сначала скопируйте файл в отдельный каталог, затем заархивируйте его, затем прочтите его в массив байтов и затем удалите)
ZipArchive
класс. Он работает с потоками и не требует временных файлов. - person Ivan Stoev   schedule 25.05.2016