我使用以下代码创建拆分档案:
string filename = "FileName.pdf";
using (ZipFile zip = new ZipFile())
{
zip.UseZip64WhenSaving = Zip64Option.Default;
zip.CompressionLevel = Ionic.Zlib.CompressionLevel.Default;
using (FileStream stream = new FileStream(temp, FileMode.Open))
{
zip.AddEntry(filename, stream);
zip.MaxOutputSegmentSize = settings.AttachmentSize * (1024 * 1024);
zip.Save(zipFileName);
}
}
上面的代码生成3个文件:file.zip, file.z01 and file.z02
。当我右键单击该zip文件并选择Extract All
(不使用WinRAR或其他压缩软件来解压缩,只使用内置的Windows )时,它会给出以下错误:
同一卷不能同时用作源和目标。
奇怪的是,它只发生在我第一次尝试提取文件时,接下来的提取是可以的,所以首先必须是压缩文件的方式。
更新1
即使我提取到另一个文件夹,也会发生同样的情况。
已经在DotNetZip Codeplex网站上就这个问题进行了讨论,但是这个问题似乎还没有得到解决。
http://dotnetzip.codeplex.com/discussions/239172
http://dotnetzip.codeplex.com/discussions/371005
更新2
查看MaxOutputSegmentSize属性的文档,引用如下:
我不相信Windows资源管理器可以提取拆分的存档文件。
但是没有进一步的解释了为什么。我认为这是假阳性,因为如上所述,
只有在我第一次尝试解压缩文件时才会发生这种情况,接下来的提取是可以的。
我使用的是Windows8.1 64位.
发布于 2015-07-10 11:59:27
在搜索软件失败的原因时,首先要做的是查找错误消息的来源。你用首先使用谷歌做的。第二次命中(现在)是金,来人呀已经解压缩了Windows的可执行文件,并将这个特定的字符串定位为资源ID #10209,在一个名为zipfldr.dll
的文件中具有Microsoft版权通知。
这是一个很好的匹配,zipfldr.dll是shell名称空间扩展,用于显示.zip文件的内容,就像它是一个文件夹一样。您可以在Regedit.exe中看到它,导航到HKEY_CLASSES_ROOT\CLSID\ {E88DCCE0-B7B3-11d1-A9F0-00AA0060FA31}
进行主注册。HKEY_CLASSES_ROOT\SystemFileAssociations\ .zip\CLSID
注册表项将其与.zip文件关联。
所以你有一个很难理解的事实,那就是资源管理器的扩展。当然,你对此无能为力。唯一的疑问是,您使用的Zip库可能是错误的跨文件内容,从而导致扩展名掉了下来。如果看到一个以上的库跳转了这个错误,那么Ionic和Dotnetzip都有完全相同的错误的可能性就会大大降低。不是零,程序员往往有一个“他们怎么做的”窥视其他程序员的代码的灵感。事实上,这个错误是假的,把钉子钉在棺材里,你会期望坏的压缩存档内容会反复出错。
您可能能够反向设计潜在的问题,您可以使用SysInternals的流程监视器进行反向工程。您将看到Explorer读取和写入文件。可能在临时目录中,如果.zip文件已经存在于该目录中,您可能会得到类似于此的错误。在大多数机器上,TEMP是一个非常混乱的文件夹,太多的程序无法在它们自己之后进行适当的清理。包括zip库,这是一种吸引人的理论,没有其他证据支持:)
如果这不能实现,那么最终的退路是微软。他们有一个1800个电话号码,在那里你可以得到他们的产品问题的支持。我已经用过好几次了,他们总是解决我的问题并退还预付的费用。然而,这是一个Windows问题,一个拥有10亿用户的产品。充其量,你将得到一个解决办法,一个真正的软件修复是非常不可能的。并非完全不可能,它已经完成了。但他们推荐的解决办法很有可能是“使用像Winzip这样的第三方实用程序”。不是你想听的。
发布于 2019-09-06 20:04:36
请将zip文件移动到不同的文件夹,或者尝试使用7zip解压缩这些文件。
发布于 2022-04-16 17:20:20
https://stackoverflow.com/questions/31286707
复制相似问题