GZipStream 可以工作,但扩展名丢失
我正在使用以下代码来压缩文件,它工作正常,但是当我用 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();
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
GZip 只压缩一个文件 - 不知道文件名。因此,如果您压缩文件
myReport.xls
,则应将其命名为myReport.xls.gz
。解压时,最后一个文件扩展名将被删除,因此您最终会得到原始文件名。这就是它在 Unix/Linux 中多年来的使用方式......
GZip compresses only one file - without knowing the name. Therefore if you compress the file
myReport.xls
you should name itmyReport.xls.gz
. On decompression the last file extension will be removed so you end up with the original filename.That its the way how it is used in Unix/Linux for ages...
确实很奇怪。简短的搜索得出以下内容:
http://dotnetzip.codeplex.com/discussions/268293
这表示 GZipStream 无法知道正在写入的流的名称,并建议您直接设置
FileName
属性。希望有帮助。
Very weird indeed. A brief search came up with the following:
http://dotnetzip.codeplex.com/discussions/268293
Which says that GZipStream has no way of knowing the name of the stream that is being written, and suggests you set the
FileName
property directly.Hope that helps.