无法找到中央目录结束记录

use*_*975 34 c# zipfile

我正在使用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)
Run Code Online (Sandbox Code Playgroud)

这是程序

    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();
    }
Run Code Online (Sandbox Code Playgroud)

我不明白这个错误.任何人都可以解释这个谢谢MR

paq*_*mez 29

问题是Unzip无法找到表示存档结束的代码行,因此:

  1. 存档已损坏.
  2. 它不是.zip存档.

    • 它可能是.rar或其他压缩类型.或者我在这里怀疑,你正在下载一个自动重定向到zip文件的html文件.
  3. 存档有1个以上的部分.
    • 多部分zip文件.

使用您喜欢的zip实用程序打开文件将告诉它可能是哪一个.

  • “用你最喜欢的 zip 实用程序打开文件会告诉它可能是其中的哪一个。” - 您能否通过指定如何解决来增强您的答案,好吗?我面临同样的错误消息,至少 7zip 和 Windows 资源管理器将打开文件而不会抱怨。 (2认同)

Sco*_*ain 14

从您删除的旧问题.

我得到System.IO.InvalidDataException:找不到中央目录记录的结尾.

这很可能意味着您传入的文件格式不正确且Zip失败.由于您已经outfile在硬盘驱动器上安装了该文件,我建议您尝试使用内置于zip提取器的Windows打开该文件,看看它是否有效.如果失败,问题不在于您的解压缩代码,而在于服务器发送给您的数据.


SZL*_*SZL 6

我有同样的问题,但在我的情况下问题是压缩部分而不是解压缩.

在压缩过程中,我需要使用Stream和ZipArchive对象的"Using"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
Run Code Online (Sandbox Code Playgroud)