【问题标题】:Zip package with Unicode chars in file name can't be uncompressed with System.IO.Packaging.Package?无法使用 System.IO.Packaging.Package 解压缩文件名中带有 Unicode 字符的 Zip 包?
【发布时间】:2015-10-26 10:37:04
【问题描述】:

文件包操作有些麻烦。

这里是问题的简短描述:

如果一个包中包含一个包含Unicode字符的文件,它的压缩效果很好(可以在windows中打开包并解压缩它)但是如果尝试使用这个Package.Open(..,FileMode.Open),它导致错误“文件包含损坏的数据”。

问题:我做错了什么?想不通这个。请指教。

这是我使用的用于压缩和不妥协的内存中二进制数据的代码:

public virtual byte[] UnZipFile(byte[] data, string packageFileName)
{
    using (var inputStream = new MemoryStream(data))
    {
        using (var package = Package.Open(inputStream, FileMode.Open))
        {
            var fileUri = PackUriHelper.CreatePartUri(new Uri(@"/" + packageFileName, UriKind.Relative));

            using (var outputStream = new MemoryStream())
            {
                using (var partStream = package.GetPart(fileUri).GetStream())
                {
                    partStream.CopyTo(outputStream);
                }
                return outputStream.ToArray();
            }
        }
    }
}

public virtual byte[] ZipFile(byte[] data, string packageFileName)
{
    using (var outMs = new MemoryStream())
    {
        using (var package = Package.Open(outMs, FileMode.Create))
        {
            var fileUri = PackUriHelper.CreatePartUri(new Uri(@"/" + packageFileName, UriKind.Relative));
            var contentType = @"data/" + packageFileName.Substring(packageFileName.LastIndexOf(".", StringComparison.Ordinal) + 1);
            using (var zipStream = package.CreatePart(fileUri, contentType, CompressionOption.Normal).GetStream())
            {
                using (var ms = new MemoryStream(data))
                {
                    ms.CopyTo(zipStream);
                }
            }
        }
        return outMs.ToArray();
    }
}

【问题讨论】:

  • Zip 支持很笨拙,它只支持文件名的 Encoding.ASCII。使用 .NET 4.5 System.IO.Compression 命名空间或库。

标签: c# unicode in-memory system.io.packaging


【解决方案1】:

通过使用较新的库 System.IO.Compression 解决,感谢您指出这个@Hans Passant

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    相关资源
    最近更新 更多