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
собственность напрямую.
надеюсь, что это поможет.