文件名中包含 Unicode 字符的 Zip 包无法使用 System.IO.Packaging.Package 解压缩?
Zip package with Unicode chars in file name can't be uncompressed with System.IO.Packaging.Package?
文件包操作有一些问题。
这里是问题的简短描述:
如果一个包中包含一个带有 Unicode 字符的文件,压缩它效果很好(可以打开包并在 windows 中解压缩它)但是如果尝试使用这个 Package.Open(. ., FileMode.Open), 导致错误 "File contains corrupted data"。
问题:我做错了什么?无法弄清楚这一点。请指教
这是我使用的压缩和不妥协内存中二进制数据的代码:
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();
}
}
已通过使用更新的库解决,System.IO.Compression,感谢您指出这个@Hans Passant
文件包操作有一些问题。
这里是问题的简短描述:
如果一个包中包含一个带有 Unicode 字符的文件,压缩它效果很好(可以打开包并在 windows 中解压缩它)但是如果尝试使用这个 Package.Open(. ., FileMode.Open), 导致错误 "File contains corrupted data"。
问题:我做错了什么?无法弄清楚这一点。请指教
这是我使用的压缩和不妥协内存中二进制数据的代码:
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();
}
}
已通过使用更新的库解决,System.IO.Compression,感谢您指出这个@Hans Passant