我正在创建以下代码的zip文件
ZipArchive MyZipArchive = System.IO.Compression.ZipFile.Open(@"c:\ZipProject\Test.zip", ZipArchiveMode.Update);
然后我将文件添加到zip中,如下所示。 fielList中大约有10个文件,每个文件大小为250 mb
foreach (string f in fileList)
{
MyZipArchive.CreateEntryFromFile(f,Path.GetFileName(f),CompressionLevel.Fastest );
}
在第一个文件上,我收到OutOfMeomry异常 是否有将大文件添加到zip的方法? 我已经尝试了所有压缩方式,但结果相同
答案 0 :(得分:1)
使用几个只有几个MB的文件和一个空的zip文件来测试您的代码。 如果失败,则问题不在于内存,而在于编程错误。 如果可行,则实际上您的虚拟内存不足。在这种情况下,您将必须切换到x64才能寻址超过4 GB的内存。那是假设您有足够的物理内存。
答案 1 :(得分:1)
我测试了您的示例(下面是完整代码)
using System;
using System.IO;
using System.IO.Compression;
namespace ZipTest
{
internal static class Program
{
private static void Main()
{
var fileList = new[] { @"d:\Test\file1", @"d:\Test\file2", @"d:\Test\file3", @"d:\Test\file4",
@"d:\Test\file5", @"d:\Test\file6", @"d:\Test\file7", @"d:\Test\file8", @"d:\Test\file9", @"d:\Test\file10" };
using (var MyZipArchive = ZipFile.Open(@"d:\Test\Test.zip", ZipArchiveMode.Update))
{
foreach (var f in fileList)
{
Console.WriteLine("Compressing: " + f);
MyZipArchive.CreateEntryFromFile(f, Path.GetFileName(f), CompressionLevel.Fastest);
}
}
}
}
}
文件总大小约为2 GB,压缩后的大小几乎相同(我使用了安装程序,因为没有找到其他大文件)。
第一次运行导致内存不足异常(在最后一个文件之后)。这似乎导致Windows清除了(空闲的未使用状态)内存,并且没有其他运行引起异常。该应用程序的总虚拟内存约为3.5 GB
请参阅注释中的重复项。这可能会对您有所帮助。