问题描述
压缩文件问题
此代码
压缩,但这里出现了第一个问题:我无法使用文件扩展名保存
我更改为zip,如果使用doc或其他
,则无法使用原始扩展名进行压缩
problem with compress file
this code
to compress but first problem here: I cant save with file Extension
I change to zip there is no way to compress with original Extension if doc or other
private void button1_Click_1(object sender, EventArgs e)
{
OpenFileDialog op = new OpenFileDialog();
op.ShowDialog();
string filename = op.FileName;//@"c:\good";// //Program.x;
SaveFileDialog sv=new SaveFileDialog ();
sv.ShowDialog ();
string savefile=sv.FileName ;
FileStream infile = File.OpenRead(filename);
byte[] buffer = new byte[infile.Length];
infile.Read(buffer, 0, buffer.Length);
infile.Close();
FileStream outfile = File.Create(Path.ChangeExtension(savefile , "zip"));
// FileStream outfile = File.Create(savefile +".zip");
GZipStream gzipStream = new GZipStream(outfile, CompressionMode.Compress, true);
// gzipStream.CanTimeout = true;
MessageBox.Show(gzipStream.CanTimeout.ToString());
gzipStream.Write(buffer, 0, buffer.Length);
gzipStream.Close();
progressBar1.Value = 100;
解压缩时的第二个问题
second problem when decompress
private void but_Decompress_Click(object sender, EventArgs e)
{
OpenFileDialog op = new OpenFileDialog();
op.ShowDialog();
string filename = op.FileName;//@"c:\good";// //Program.x;
SaveFileDialog sv = new SaveFileDialog();
sv.ShowDialog();
string savefile = sv.FileName;
// string filename = Server.MapPath("TextFile.zip");
FileStream infile = File.OpenRead(filename);
DeflateStream deflateStream = new DeflateStream(infile, CompressionMode.Decompress);
byte[] buffer = new byte[infile.Length + 100];
int offset = 0;
int totalCount = 0;
while (true)
{
int bytesRead = deflateStream.Read(buffer, offset, 100);
if (bytesRead == 0) { break; }
offset += bytesRead;
totalCount += bytesRead;
}
FileStream outfile = File.Create(Path.ChangeExtension(savefile , "Doc"));
outfile.Write(buffer, 0, buffer.Length);
outfile.Close();
}
此错误
this error
Block length does not match with its complement
我尝试改变
and I try with change
int bytesRead = deflateStream.Read(buffer, offset, 100);
到
to
int bytesRead = deflateStream.Read(buffer, offset, buffer.Length );
我仍然有此错误
请任何帮助
并感谢您的帮助
[修改:添加了前置标签...它们使世界变得更漂亮了!还修复了制表符并摆脱了textspeak的问题.]
I still have this error
please any help
and thanks for any help
[Modified: added pre tags...they make the world a prettier place! Also fixed the tabbing and got rid of the textspeak.]
推荐答案
OpenFileDialog op = new OpenFileDialog();
op.ShowDialog();
string filename = op.FileName;//@"c:\good";// //Program.x;
SaveFileDialog sv = new SaveFileDialog();
sv.Filter = "Zip files|*.zip";
sv.ShowDialog();
string savefile = sv.FileName;
FileStream infile = File.OpenRead(filename);
byte[] buffer = new byte[infile.Length];
infile.Read(buffer, 0, buffer.Length);
infile.Close();
FileStream outfile = File.Create(savefile);
GZipStream gzipStream = new GZipStream(outfile, CompressionMode.Compress, false);
gzipStream.Write(buffer, 0, buffer.Length);
gzipStream.Close();
gzipStream.Dispose();
解压缩时,需要将"DeflateStream"更改为"GZipStream".因此,而不是
When decompressing you need to change "DeflateStream" to "GZipStream". So instead of
DeflateStream deflateStream = new DeflateStream(infile, CompressionMode.Decompress);
只需使用:
just use:
GZipStream deflateStream = new GZipStream(infile, CompressionMode.Decompress);
这篇关于压缩文件问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!