我使用下面的c#代码来压缩文件:
// Open the stream we want to compress
FileStream fs = File.Create(@"C:ProjectsSamplestestcompressed.zip", 0);
// Creates the GZipStream
GZipStream gzip = new GZipStream(fs, CompressionMode.Compress);
// Reading the content to compress
byte[] bytes = File.ReadAllBytes(@"C:ProjectsSamplessamplefile.xml");
// Writing compressed content
gzip.Write(bytes, 0, bytes.Length);
gzip.Close(); // This also closes the FileStream (the underlying stream)
然而,当我从windows资源管理器中提取文件时,文件失去了扩展名,而不是samplefile.xml,它只是变成了samplefile。同样的事情也发生在。txt文件上,而不仅仅是。xml文件。
你能帮我看看我做错了什么吗?
ok找到问题了:
第二行必须如下所示:
FileStream fs = File.Create(@"C:ProjectsSamplestestcompressed.xml.zip", 0);
GZipStream不创建zip存档。它创建一个gzip文件,其中只包含一个文件,并且根本不需要存储文件名。通常,您应该使用.gz
扩展名来标识gzip文件,并且通常使用原始文件的整个名称并在末尾附加.gz
。有关gzip格式的更多信息,请参阅此处:http://en.wikipedia.org/wiki/Gzip#File_format
如果您确实想要创建zip存档,您可能希望使用像SharpZipLib这样的库:http://www.icsharpcode.net/opensource/sharpziplib/