Gzipstream работает, но расширение потеряно

Я использую следующий код для zip-файла, и он отлично работает, но когда я распаковываю WinRar, я получаю исходное имя файла без расширения, любой ключ, почему, если filename 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 ответов


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

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


действительно, очень странно. Пришел недолгих поисков следующий:

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

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

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