GZipStream работает, но расширение потеряно - PullRequest
7 голосов
/ 14 октября 2011

Я использую следующий код для архивирования файла, и он работает нормально, но когда я распаковываю с помощью WinRar, я получаю исходное имя файла без расширения, любая подсказка, почему, если имя файла равно myReport.xls, когда я распаковываю, я получаю только myReport?

using (var fs = new FileStream(fileName, FileMode.Open))
{
    byte[] input = new byte[fs.Length];
    fs.Read(input, 0, input.Length);
    fs.Close();

    using (var fsOutput = new FileStream(zipName, FileMode.Create, FileAccess.Write))
    using(var zip = new GZipStream(fsOutput, CompressionMode.Compress))
    {
        zip.Write(input, 0, input.Length);
        zip.Close();
        fsOutput.Close();
    }
}

Ответы [ 2 ]

17 голосов
/ 14 октября 2011

GZip сжимает только один файл - не зная имени.Поэтому, если вы сжимаете файл myReport.xls, вам следует назвать его myReport.xls.gz.При распаковке последнее расширение файла будет удалено, поэтому вы получите исходное имя файла.

То, как это используется в Unix / Linux целую вечность ...

2 голосов
/ 14 октября 2011

Очень странно.В результате краткого поиска было получено следующее:

http://dotnetzip.codeplex.com/discussions/268293

. В нем говорится, что GZipStream не может узнать имя записываемого потока, и предлагается установить * 1006.* собственность напрямую.

Надеюсь, что поможет.

...