Я работаю с ZipArchive, и это в основном работает, одна проблема, которую я вижу, заключается в том, что при загрузке файла я не могу открыть его с помощью программ архивирования по умолчанию Windows. Если я нажму zip-файл и извлечу все, то получаю сообщение об ошибке, в котором говорится, что для извлечения нет записей. Кто-нибудь знает, почему это происходит? Для чего это стоит, я могу открыть тот же файл с 7zip и извлечь файл просто отлично.ZipArchive создает недопустимый ZIP-код
public virtual ActionResult GetZip()
{
var summary = GetBytes();
var response = new MemoryStream();
using (var stream = new MemoryStream())
{
using (var archive = new ZipArchive(stream, ZipArchiveMode.Create, true))
{
var entry = archive.CreateEntry("myfiletozip" + fileExt);
using (var writer = new BinaryWriter(entry.Open()))
{
writer.Write(summary, 0, summary.Length);
}
stream.Seek(0, SeekOrigin.Begin);
stream.CopyTo(response);
}
}
response.Seek(0, SeekOrigin.Begin);
return this.File(response, MediaTypeNames.Application.Zip, "myzipfilename.zip");
}
UPDATE:
Нашел SO Answer и изменил мой источник, и она работает .... и я до сих пор не знаю, почему.
byte[] response;
using (var stream = new MemoryStream())
{
using (var archive = new ZipArchive(stream, ZipArchiveMode.Create, true))
{
var entry = archive.CreateEntry("myfiletozip" + fileExt, CompressionLevel.Optimal);
using (var entryStream = entry.Open())
using (var fileToCompressStream = new MemoryStream(summary))
{
fileToCompressStream.CopyTo(entryStream);
}
}
response = stream.ToArray();
}
Что делает 'this.File (...)' do? – Dawnkeeper
Я считаю, что проблема заключалась в том, что я явно не распоряжался записью. Open() во втором примере/обновлении, если добавил другой, используя инструкцию для записи, и это, казалось, дало мне правильное поведение. –