Zip-пакет с символами Unicode в имени файла не может быть распакован с помощью System.IO.Packaging.Package?

Возникли проблемы с манипулированием пакетами файлов.

Вот краткое описание проблемы:

Если пакет содержит файл с символами 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();
    }
}

person Weazel    schedule 26.10.2015    source источник
comment
Поддержка Zip неуклюжая, она поддерживает только Encoding.ASCII для имени файла. Используйте пространство имен .NET 4.5 System.IO.Compression или библиотеку.   -  person Hans Passant    schedule 26.10.2015


Ответы (1)


решено с помощью более новой библиотеки System.IO.Compression, спасибо за указание на это @Hans Passant

person Weazel    schedule 26.10.2015