Я пытаюсь создать ZIP-архив с простым демонстрационным текстовым файлом, используя MemoryStream
следующие:
using (var memoryStream = new MemoryStream())
using (var archive = new ZipArchive(memoryStream , ZipArchiveMode.Create))
{
var demoFile = archive.CreateEntry("foo.txt");
using (var entryStream = demoFile.Open())
using (var streamWriter = new StreamWriter(entryStream))
{
streamWriter.Write("Bar!");
}
using (var fileStream = new FileStream(@"C:\Temp\test.zip", FileMode.Create))
{
stream.CopyTo(fileStream);
}
}
Если я запускаю этот код, сам файл архива создается, а foo.txt - нет.
Тем не менее, если я заменю MemoryStream
непосредственно поток файла, архив будет создан правильно:
using (var fileStream = new FileStream(@"C:\Temp\test.zip", FileMode.Create))
using (var archive = new ZipArchive(fileStream, FileMode.Create))
{
// ...
}
Можно ли использовать MemoryStream
для создания архива ZIP без FileStream
?
c#
.net
zip
compression
ziparchive
Мариус Шульц
источник
источник
using
дляentry.Open
, только предположения.Ответы:
Благодаря https://stackoverflow.com/a/12350106/222748 я получил:
Поэтому нам нужно вызвать dispose для ZipArchive, прежде чем мы сможем его использовать, что означает передачу «true» в качестве третьего параметра в ZipArchive, чтобы мы могли получить доступ к потоку после его удаления.
источник
Просто еще одна версия архивирования без записи какого-либо файла.
источник
Установите позицию потока в 0 перед копированием в поток zip.
источник
Рабочее решение для MVC
источник
Controller.File
Метод имеет перегрузку , которая принимаетStream
. Используйте это, чтобы избежать создания еще одной копии файла ZIP в памяти.Вам нужно закончить запись потока памяти и затем прочитать буфер обратно.
источник
источник
Это способ конвертировать сущность в XML-файл и затем сжать его:
}
источник
Функция для возврата потока, содержащего zip-файл
Если хотите, напишите zip в файл stream.
`
источник
byteArray
и один раз вZipArchive
. Не говоря уже о том, что вам вообще не нужно загружать файлы в память. Используйте потоковую передачу, как показано во всех других существующих ответах.источник