我正在尝试将文件添加到 Zip 文件中,同时保留目录。只要我没有要压缩的 100 Mb 文件,下面的代码基本上就可以工作。如果我只是压缩一个包含 1 个大约 250 Mb 文件的目录(顺便说一句,在具有大量内存的系统上),我会得到一个 OutOfMemory 异常write.Write()
。
我已经修改了代码以分块读取,因为它在我读/写整个文件时第一次失败。不知道为什么还是失败?
using (FileStream zipToOpen = new FileStream(cZipName, eFileMode))
ZipArchiveEntry readmeEntry = archive.CreateEntry(cFileToBackup
);
using (BinaryWriter writer = new BinaryWriter(readmeEntry.Open()))
{
FileStream fsData = null; // Load file into FileStream
fsData = new FileStream(cFileFull, FileMode.Open, FileAccess.Read);
{
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = fsData.Read(buffer, 0, buffer.Length)) > 0)
{
writer.Write(buffer,0,bytesRead); // here it fails
fsData.Flush(); // ->CHANGED THIS TO writer.Flush() SOLVED IT - nearly..
}
}
fsData.Close();
}
编辑:Arkadiusz K 是对的,我在阅读器上使用了同花顺,而不是作者。更改后,该程序将 1 Gb 或更大的文件压缩到它首先停止在 100 Mb 的位置。但是,当我尝试压缩例如 6 Gb 文件时出现另一个异常 - 它停止于: System.IO.IOException is unhandled Stream is too long Source=mscorlib StackTrace: at System.IO.MemoryStream.Write(Byte[] buffer , Int32 偏移量, Int32 计数) (等)
有谁知道为什么它仍然失败?我会说代码现在应该一次正确地读取和写入 1 Kb?