Zip-пакет с символами Unicode в имени файла не может быть распакован с помощью System.IO.Packaging.Package?
Возникли проблемы с обработкой файловых пакетов.
Вот краткое описание проблемы:
Если в пакете содержится файл с символами Unicode, его сжатие работает хорошо (можно открыть пакет и распаковать его в Windows), но если попытаться использовать этот Package.Open (.., FileMode.Open), это приведет к ошибке Msgstr "Файл содержит поврежденные данные".
Вопрос: что я делаю не так? Не могу понять это. Пожалуйста, порекомендуйте.
Вот код для сжатия и бескомпромиссных двоичных данных в памяти, которые я использую:
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();
}
}
1 ответ
Решение
Решена с помощью более новой библиотеки lib, System.IO.Compression, спасибо за указание на этот @Hans Passant