【问题标题】:It does not appear to be a valid archive (Byte array to zip file in c#.net)它似乎不是有效的存档(字节数组到 c#.net 中的 zip 文件)
【发布时间】:2015-11-03 13:14:49
【问题描述】:

我在将字节数组转换为 zip 文件时遇到问题。即使 zip 文件是使用下面的代码创建的,但是当我提取 zip 文件时,我收到错误 "Cannot open file. It does not appear to be a valid archive"

private static void ShowZipFile(string fileName, byte[] data)
{
    byte[] compress = Compress(data);
    File.WriteAllBytes(fileName, compress);
}            

private static byte[] Compress(byte[] data)
{
    using (MemoryStream memory = new MemoryStream())
    {
        using (GZipStream gzip = new GZipStream(memory,
        CompressionMode.Compress, true))
        {
            gzip.Write(data, 0, data.Length);
        }
        return memory.ToArray();
    } 

}

【问题讨论】:

  • 你是如何解压 zip 文件的?您是以编程方式执行的,还是使用 7zip 之类的外部实用程序?如果您以编程方式执行此操作,您使用的代码是什么?
  • 没有。我是手动解压的。
  • “手动提取”到底是什么意思?你需要比这更具体
  • 我只是右键单击压缩文件并单击此处提取。
  • 我有字节数组,我必须在文件中将其转换为 excel 文件或 zip 文件或任何其他文件。此代码正在转换文件中的字节数组,但我只能打开 excel 文件而不是 zip 文件。

标签: c# .net zipfile


【解决方案1】:

基本上,GZipStream 不是 zip 文件 - 它是 gzip 文件。那只是压缩数据,没有多个文件、文件名等概念。如果将文件保存为foo.gz,您可能会发现您使用的 zip 工具知道如何解压缩,但您绝对需要了解它不是与带有文件条目等的 foo.zip 相同。

如果您想创建一个实际 zip 文件,您可能需要查看SharpZipLibSystem.IO.Compression.ZipFile 或类似的库。

【讨论】:

  • 我在 .net 4.5 中没有得到这个命名空间 System.IO.Compression.zipFile
  • @user3206357:那么你有对 System.IO.Compression.FileSystem.dll 的引用吗?
  • 是的..有System.IO.Compression.FileSystem的参考
  • @user3206357:嗯,我不知道你做错了什么,除了类型是ZipFile,大写z。我刚刚尝试了一个针对 .NET 4.5 的新项目,它发现该类型没有问题。请注意,它是 type 的名称,而不是 namespace
  • Skeet 你能分享一下使用 ZipFile 的代码吗?
猜你喜欢
  • 2021-06-02
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 2022-08-18
  • 2023-01-31
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
相关资源
最近更新 更多