c# gzip压缩后,解压出来文件不能用了
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# gzip压缩后,解压出来文件不能用了相关的知识,希望对你有一定的参考价值。
代码如下
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.IO.Compression;
namespace GZip
public partial class Form1 : Form
public Form1()
InitializeComponent();
private void button2_Click(object sender, EventArgs e)
StreamReader sr = File.OpenText(textBox1.Text);//打开原始文件
string data = sr.ReadToEnd();//读取原始文件
sr.Close();
FileStream fc = new FileStream(textBox1.Text + ".gzip",FileMode.Create,FileAccess.Write);//创建压缩文件
GZipStream compressionStream = new GZipStream(fc,CompressionMode.Compress);//创建压缩流对象
StreamWriter writer = new StreamWriter(compressionStream);//创建写入压缩流对象
writer.Write(data);//将文件写入压缩流
writer.Flush();
writer.Dispose();
compressionStream.Dispose();
fc.Dispose();
MessageBox.Show("压缩完成");
private void button1_Click(object sender, EventArgs e)
OpenFileDialog of = new OpenFileDialog();
of.Multiselect = false;
of.ShowDialog();
textBox1.Text = of.FileName;
private void button3_Click(object sender, EventArgs e)
FileStream fc = File.OpenRead(textBox1.Text);
GZipStream cs = new GZipStream(fc, CompressionMode.Decompress);//创建解压缩流对象
StreamReader reader = new StreamReader(cs);//创建写入解压流对象
string data = reader.ReadToEnd();//读取解压缩流中的
reader.Close();
cs.Close();
StreamWriter writer = File.CreateText(textBox1.Text.Replace(".gzip",""));
writer.Write(data);
writer.Close();
MessageBox.Show("解压成功");
求解为何?是代码有问题吗?
c# .net gzip压缩源码
你可以使用.net的GZipStream来实现。受以下版本支持:4.5、4、3.5、3.0、2.0参考:
下面的示例演示如何使用 GZipStream 类压缩和解压缩文件目录。
using System;
using System.IO;
using System.IO.Compression;
namespace zip
public class Program
public static void Main()
string directoryPath = @"c:\\users\\public\\reports";
DirectoryInfo directorySelected = new DirectoryInfo(directoryPath);
foreach (FileInfo fileToCompress in directorySelected.GetFiles())
Compress(fileToCompress);
foreach (FileInfo fileToDecompress in directorySelected.GetFiles("*.gz"))
Decompress(fileToDecompress);
public static void Compress(FileInfo fileToCompress)
using (FileStream originalFileStream = fileToCompress.OpenRead())
if ((File.GetAttributes(fileToCompress.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz")
using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".gz"))
using (GZipStream compressionStream = new GZipStream(compressedFileStream, CompressionMode.Compress))
originalFileStream.CopyTo(compressionStream);
Console.WriteLine("Compressed 0 from 1 to 2 bytes.",
fileToCompress.Name, fileToCompress.Length.ToString(), compressedFileStream.Length.ToString());
public static void Decompress(FileInfo fileToDecompress)
using (FileStream originalFileStream = fileToDecompress.OpenRead())
string currentFileName = fileToDecompress.FullName;
string newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length);
using (FileStream decompressedFileStream = File.Create(newFileName))
using (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress))
decompressionStream.CopyTo(decompressedFileStream);
Console.WriteLine("Decompressed: 0", fileToDecompress.Name);
追问
错误 143 “System.IO.FileStream”并不包含“CopyTo”的定义
错误 144 “System.IO.Compression.GZipStream”并不包含“CopyTo”的定义
高手,是不是还需要哪个程序集?
你使用的是什么版本的.net或是VS?
这个示例是MSDN上的。应该没问题。我使用的是VS2013。.net4.5
如果你不是这个版本也没有关系。不是说没有CopyTo吗,你可以替换掉这个方法。或不调用它,或改成别的同效果的函数。总之你使用的是它的压缩功能。不是它的示例。
c#.net
追答你的.net版本是多少,你的VS是多少版本。
只要你的.net版本在2.0以上应该就可以使用。只是属性方法什么的可能会有些不同。
给你个2.0的代码参考:
http://msdn.microsoft.com/zh-cn/library/zs4f0x23(v=vs.80).aspx
代码gzip压缩后 图标是这样的吗?我压缩的是.txt文件
如果把.txt文件去掉,那么压缩文件里面.txt的文件后缀也没有了,应该是这样的吗?
图标不重要,那是你机器上安装的可处理gzip的软件对应的图标。
重要的是能解开使用,比如再使用GZipStream能解开,或使用rar能打开就是可以的。
http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx追问
你好,我说的是.gzip压缩,不是.zip
追答上面只是那个dll的名称,你应该点击下我给你的链接去看下说明:
#ziplib (SharpZipLib, formerly NZipLib) is a Zip, GZip, Tar and BZip2 library written entirely in C# for the .NET platform.
另外,如果你的目的只是在.net完全版下用,可以参考:
public static byte[] CompressData(byte[] data)
using (MemoryStream msOut = new MemoryStream())
GZipStream gzs = new GZipStream(msOut, CompressionMode.Compress, true);
gzs.Write(data, 0, data.Length);//压缩并写入内存
gzs.Close();
return msOut.ToArray();
高手,我对.gzip一点都不熟悉 y压缩后的图标是 这样的吗?
双击打开后里面是
这样的
还是这样的?
指点一下吧,头都晕了
文件一般是从其扩展名判断其类型(但扩展名也是可以随便改的,扩展名主要告诉系统该用什么软件打开这个文件才正确),至于显示的图标就更没关系了,你现在是用winrar关联打开,如果用其他软件则会显示其他图标。
以上是关于c# gzip压缩后,解压出来文件不能用了的主要内容,如果未能解决你的问题,请参考以下文章