我正在使用c#程序下载zip文件,我收到错误
at System.IO.Compression.ZipArchive.ReadEndOfCentralDirectory()
at System.IO.Compression.ZipArchive.Init(Stream stream, ZipArchiveMode mode,
Boolean leaveOpen)
at System.IO.Compression.ZipArchive..ctor(Stream stream, ZipArchiveMode mode,
Boolean leaveOpen, Encoding entryNameEncoding)
at System.IO.Compression.ZipFile.Open(String archiveFileName, ZipArchiveMode
mode, Encoding entryNameEncoding)
at System.IO.Compression.ZipFile.ExtractToDirectory(String sourceArchiveFileN
ame, String destinationDirectoryName, Encoding entryNameEncoding)
at System.IO.Compression.ZipFile.ExtractToDirectory(String sourceArchiveFileN
ame, String destinationDirectoryName)
这是程序
response = (HttpWebResponse)request.GetResponse();
Stream ReceiveStream = response.GetResponseStream();
byte[] buffer = new byte[1024];
FileStream outFile = new FileStream(zipFilePath, FileMode.Create);
int bytesRead;
while ((bytesRead = ReceiveStream.Read(buffer, 0, buffer.Length)) != 0)
outFile.Write(buffer, 0, bytesRead);
outFile.Close();
response.Close();
try
{
ZipFile.ExtractToDirectory(zipFilePath, destnDirectoryName);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
Console.ReadLine();
}
我不明白这个错误。任何人都可以解释一下 谢谢 MR
答案 0 :(得分:26)
问题是解压缩无法找到表示存档结束的代码行,因此:
存档已损坏。
它不是.zip存档。
使用您喜欢的zip实用程序打开文件将告诉它们可能是哪一个。
答案 1 :(得分:12)
从您删除的旧问题。
我收到System.IO.InvalidDataException:找不到中央目录记录的结尾。
这很可能意味着您传入的文件格式不正确且Zip失败。由于您已经在硬盘驱动器上安装了文件outfile
,我建议尝试使用带有zip解压缩程序的Windows打开该文件,看看它是否有效。如果失败,问题不在于您的解压缩代码,而在于服务器发送给您的数据。
答案 2 :(得分:6)
我遇到了同样的问题,但在我的情况下,问题在于压缩部分,而不是解压缩。
在压缩过程中,我需要使用"使用"与Stream和ZipArchive对象的statament也是如此。 "使用" statament将正确关闭存档,我可以毫无问题地解压缩它。
我在VB.Net中的工作代码:
Using zipSteramToCreate As New MemoryStream()
Using archive As New ZipArchive(zipSteramToCreate, ZipArchiveMode.Create)
' Add entry...
End Using
' Return the zip byte array for example:
Return zipSteramToCreate.ToArray
End Using
答案 3 :(得分:3)
我遇到了同样的问题。有许多类型的压缩,.zip只是其中一种类型。查看并确保您没有尝试“解压缩”.rar或类似文件。
答案 4 :(得分:1)
当我从调用Net.WebClient DownloadFile方法的PowerShell脚本遇到同样的错误时,我刚遇到这个帖子。
在我的情况下,问题是Web服务器无法提供所请求的zip文件,而是提供了一个HTML页面,其中包含错误消息,显然无法解压缩。
相反,我创建了一个异常处理程序来提取和呈现" real"错误信息。
答案 5 :(得分:1)
在我的情况下,我绝对知道我的zip文件未损坏,并且通过反复试验,我发现我正在将文件提取到文件夹名称为FOLDER Name的目录中。
因此将/tmp/data.zip解压缩到:
/tmp/staging/data.zip/files_go_here
失败,并显示错误消息[找不到中央目录记录的结尾]
但是将data.zip提取到这个文件就可以了:
/ tmp / staging / data / files_go_here
虽然在某些人中将文件夹命名为带有扩展名的文件名似乎很不寻常,但我无法想到您为什么不能执行此操作的单个原因,更重要的是,返回的错误并不明显与原因有关。
System.IO.Compression库和SharpPipLib之类的第三方软件包都遇到了相同的错误-最终使我明白这是一个更普遍的问题。
我希望这可以帮助某人并为他们节省一些时间/沮丧。
答案 6 :(得分:0)
我使用通过Nuget包管理器提供的SharpCompress C#.net库,它解决了我解压缩的目的。
答案 7 :(得分:0)
可能对其他人有用。我通过在代码中添加一个异常处理了这个问题,然后:
答案 8 :(得分:0)
将流写入文件,然后使用(十六进制)编辑器对其进行检查。
从nuget.org下载nupkg时,我在Visual Studio中得到了相同的消息。这是因为nuget.org被防火墙列入了黑名单。因此,代替了pkg,我得到了一个HTML错误页面,该页面(当然)不能解压缩。
答案 9 :(得分:-1)
我找到了解决方法。
移动“工具-> Nuget PackageManager->软件包管理器设置”,然后在“ Nuget Package Manager”-“常规”选项卡中,单击“清除所有Nuget缓存”按钮,然后单击“确定”。您可以从网上安装软件包