【发布时间】:2015-09-28 21:41:18
【问题描述】:
我尝试使用 c# 在内存中创建一个 zip 文件,但结果是一个包含损坏文件的 zip 文件。 所有要压缩的文件都在数据库中。我存储字节。文件为PDF。 我的代码如下
//[extract bytes and file name for every file]
using (var zipArchiveMemoryStream = new MemoryStream())
{
using (var zipArchive = new ZipArchive(zipArchiveMemoryStream,
ZipArchiveMode.Create, true))
{
foreach (var file in fileData)
{
var zipEntry = zipArchive.CreateEntry(file.FileName);
using (var entryStream = zipEntry.Open())
{
using (var tmpMemory = new MemoryStream(file.Bytes))
{
tmpMemory.CopyTo(entryStream);
};
}
}
}
zipArchiveMemoryStream.Position = 0;
result = zipArchiveMemoryStream.GetBuffer();
//[download zip file]
提前感谢您的支持
TONIGNO 的解决方案: 问题是我使用 GetBuffer();而不是 ToArray();
using (var zipArchiveMemoryStream = new MemoryStream())
{
using (var zipArchive = new ZipArchive(zipArchiveMemoryStream, ZipArchiveMode.Create, true))
{
foreach (var file in fileData)
{
var zipEntry = zipArchive.CreateEntry(file.FileName);
using (var entryStream = zipEntry.Open())
{
using (var tmpMemory = new MemoryStream(file.Bytes))
{
tmpMemory.CopyTo(entryStream);
};
}
}
}
zipArchiveMemoryStream.Seek(0, SeekOrigin.Begin);
result = zipArchiveMemoryStream.ToArray();
}
return result;
【问题讨论】:
-
你的代码有什么问题?
-
我无法从 zip 中提取文件。 wirar 说文件已损坏
标签: c# zip compression