我正在尝试使用以下代码将一个大约500MB的视频文件添加到ArchiveEntry中:
using (var zipFile = ZipFile.Open(outputZipFile, ZipArchiveMode.Update))
{
var zipEntry = zipFile.CreateEntry("largeVideoFile.avi");
using (var writer = new BinaryWriter(zipEntry.Open()))
{
using (FileStream fs = File.Open(@"largeVideoFile.avi", FileMode.Open))
{
var buffer = new byte[16 * 1024];
using (var data = new BinaryReader(fs))
{
int read;
while ((read = data.Read(buffer, 0, buffer.Length)) > 0)
{
writer.Write(buffer, 0, read);
}
}
}
}
}
当调用writer.Write时,我遇到了错误
System.OutOfMemoryException
尽管我使用了一个中间缓冲区,但仍然出现了这个错误...
有什么解决办法吗?
AddEntry(name, stream)
(在调用Save
之前不要关闭流)和AddFile(name, nameInFileSystem)
。 - CodesInChaoszipFile.CreateEntryFromFile
-> 仍然不起作用。我接受了将CPU架构更改为X64的答案,但在指定ZipArchiveMode.Update
时,ZipArchiveEntry的低效值得指出(这会导致将整个zip内容加载到内存中)。 - Pinte Dani