//zipfilename是.gz所在路径,unzipfilename是解压文件的文件名
private void UnGzipFile(string zipfilename, string unzipfilename)
{
string dir = "";
//解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹
if (dir == "")
dir = zipfilename.Replace(Path.GetFileName(zipfilename), Path.GetFileNameWithoutExtension(zipfilename));
if (!dir.EndsWith("//"))
dir += "//";
if (!Directory.Exists(dir))
Directory.CreateDirectory(dir);
//创建压缩文件的输入流实例
using (GZipInputStream zipFile = new GZipInputStream(File.OpenRead(zipfilename)))
{
//创建目标文件的流
using (FileStream destFile = File.Open(dir+ unzipfilename, FileMode.Create))
{
int buffersize = 2048;//缓冲区的尺寸,一般是2048的倍数
byte[] FileData = new byte[buffersize];//创建缓冲数据
while (buffersize > 0)//一直读取到文件末尾
{
buffersize = zipFile.Read(FileData, 0, buffersize);//读取压缩文件数据
destFile.Write(FileData, 0, buffersize);//写入目标文件
}
}
}
}
引用using ICSharpCode.SharpZipLib.GZip;
.gz压缩包里面就有1个日志文件,解压出来的文件是空文件里面什么内容都没有
求各位大神帮看看有什么问题
问题找到了ICSharpCode.SharpZipLib.dll有问题,重新找了个地址下载就OK了
byte[] FileData = new byte[1024];//创建缓冲数据 int readCount;//实际读取文件的长度
while ((realCount =destFile.Read(FileData0, FileData.Length)) > 0) {
zipFile.Write(FileData, 0, readCount);//写入目标文件 }
这个好像没有什么改动把
这个好像没有什么改动把
我跟踪了就是在 destFile.Read(FileData0, FileData.Length) 得到的值为0
但实际是有文件和数据的
是不是压缩格式有问题。或者 是还缺少什么参数。在初始化 GZipInputStream 的时候。
用 GZipStream 试试,参考代码(代码来源):
FileStream stream = new FileStream(unzipfilename, FileMode.Create); GZipStream uncompressed = new GZipStream(stream, CompressionMode.Decompress); uncompressed.Write(bytes,0,bytes.Length); uncompressed.Flush(); uncompressed.Close(); stream.Dispose();
FileStream stream = new FileStream(unzipfilename, FileMode.Create); 这句是创建文件
GZipStream uncompressed = new GZipStream(stream, CompressionMode.Decompress);
那这个是在哪指定需要解压缩的文件
@飒沓如流星: stream, 以流的方式读取需要解压缩的文件
@dudu: FileStream stream = new FileStream("D:\\log\\2012-07-02-0000-2330.log.gz", FileMode.Open);
是这样运行到
uncompressed.Write(bytes, 0, bytes.Length);
报错了
@飒沓如流星:
用System.IO.File.OpenRead,参考:GZipStream and decompression
@dudu:
FileStream outputStream =
new FileStream(dir + unzipfilename, FileMode.Create, FileAccess.Write);
int bufferSize = 8192;
int bytesRead = 0;
byte[] buffer = new byte[bufferSize];
GZipStream decompressionStream =
new GZipStream(File.OpenRead(zipfilename), CompressionMode.Decompress);
// 把压缩了的数据通过GZipStream解压缩后再读出来
// 读出来的数据就存在数组里
while ((bytesRead = decompressionStream.Read(buffer, 0, bufferSize)) > 0)
{
// 把解压后的数据写入到输出数据流
outputStream.Write(buffer, 0, bytesRead);
}
decompressionStream.Close();
outputStream.Close();
这样有错么?decompressionStream.Read(buffer, 0, bufferSize)还是为0
@飒沓如流星: 接下来问题你来搞定,参考文章:C# 温故而知新:Stream篇 (四)
@dudu: 晕啊,现在这样不还是和我上面的一样
@飒沓如流星: 如果还是解决不了,建议把这部分代码打包一下提供下载,这样别人可以在自己的机器上调试一下
@dudu: 好像只能上传图片,没有上传文件的功能
@飒沓如流星: 开通博客,可以在博客后台上传文件,申请博客:passport.cnblogs.com/BlogApply.aspx