gpt4 book ai didi

c# - 更新 zip 时出现内存不足异常

转载 作者:太空狗 更新时间:2023-10-29 21:22:05 27 4
gpt4 key购买 nike

我在尝试将文件添加到 .zip 文件时遇到 OutofMemoryException。我正在使用 32 位架构来构建和运行应用程序。

string[] filePaths = Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\capture\\capture");
System.IO.Compression.ZipArchive zip = ZipFile.Open(filePaths1[c], ZipArchiveMode.Update);

foreach (String filePath in filePaths)
{
string nm = Path.GetFileName(filePath);
zip.CreateEntryFromFile(filePath, "capture/" + nm, CompressionLevel.Optimal);
}

zip.Dispose();
zip = null;

我无法理解背后的原因。

最佳答案

确切原因取决于多种因素,但很可能您只是向存档中添加了太多内容。尝试改用 ZipArchiveMode.Create 选项,它将存档直接写入磁盘而不将其缓存在内存中。

如果您真的想更新现有存档,您仍然可以使用 ZipArchiveMode.Create。但它需要打开现有存档,将其所有内容复制到新存档(使用 Create),然后添加新内容。

没有 good, minimal, complete code example , 无法确定异常的来源,更不用说如何修复它了。

编辑:

这就是我所说的“...打开现有存档,将其所有内容复制到新存档(使用 Create),然后添加新内容”的意思:

string[] filePaths = Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\capture\\capture");

using (ZipArchive zipFrom = ZipFile.Open(filePaths1[c], ZipArchiveMode.Read))
using (ZipArchive zipTo = ZipFile.Open(filePaths1[c] + ".tmp", ZipArchiveMode.Create))
{
foreach (ZipArchiveEntry entryFrom in zipFrom.Entries)
{
ZipArchiveEntry entryTo = zipTo.CreateEntry(entryFrom.FullName);

using (Stream streamFrom = entryFrom.Open())
using (Stream streamTo = entryTo.Open())
{
streamFrom.CopyTo(streamTo);
}
}

foreach (String filePath in filePaths)
{
string nm = Path.GetFileName(filePath);
zipTo.CreateEntryFromFile(filePath, "capture/" + nm, CompressionLevel.Optimal);
}
}

File.Delete(filePaths1[c]);
File.Move(filePaths1[c] + ".tmp", filePaths1[c]);

或者类似的东西。由于缺少良好的、最小完整 代码示例,我只是在浏览器中编写了上面的代码。我没有尝试编译它,更不用说测试它了。您可能想要调整一些细节(例如临时文件的处理)。但希望你明白了。

关于c# - 更新 zip 时出现内存不足异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29983151/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com