用gzip压缩后怎么文件大小反而大了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用gzip压缩后怎么文件大小反而大了相关的知识,希望对你有一定的参考价值。

这个是正常的你把一个文件压缩只是方便转移和下载比如mir2(传奇)大约是要2.3g左右如果你打个压缩包
就方便复制了如果你不打压缩包
复制整个传奇文件最少也要花上几个小时而且还特别的乱最容易放生的是
多个文件夹容易丢失文件压缩包也可以方便下载
不容易丢失
参考技术A 因为数据量太小。而且不应该用sys.getsizeof来判断,应该用len(open(FILE_NAME,
'rb').read())来判断。sys.getsizeof是测量object的大小,不是纯数据。

如何实现,读取远程文件,用GZIP压缩后保存成文件

如何实现,读取远程文件,用GZIP压缩后保存成文件
以前用 wc.DownloadFile(strUrl, file);下载文件,但我现在想把文件GZIP压缩后再保存
所以我改用

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(strUrl);
GZipStream zipStream = new GZipStream(resstr, CompressionMode.Compress);

具体该怎么写就不会了,主要是不知道该如何将 Stream写入文件。最好可以给我个现成的代码。

/// <summary>
/// 文件下载
/// </summary>
/// <param name="filename">文件名称</param>
public void FileDownLoad(string filename)

//本地文件夹
string baseLocation = Server.MapPath("~/UpFile/");

//文件名称
FileInfo fileInfo = new FileInfo(baseLocation + filename);

//文件存在
if (fileInfo.Exists)

Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileInfo.Name, System.Text.Encoding.UTF8));
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.ContentType = "application/octet-stream";

Response.Filter.Close();
Response.WriteFile(fileInfo.FullName);

//下载次数+1
string sql = "update ZYWJ set XZCS=XZCS+1 where WJMC1='" + filename + "'";
int R = DAL.DBHelper.GetScalar(sql);

if (R > 0)

//查询是否已经下载过
string sql3 = "select * from TempZYXZ where HYUserName='" + Session["UserName"].ToString() + "' and ZYWJM='" + filename + "'";
DataTable dt3 = DAL.DBHelper.GetDataSet(sql3);

if (dt3.Rows.Count > 0)

//修改单个下载次数
string sql4 = "update TempZYXZ set XZCS =XZCS+1 where HYUserName='" + Session["UserName"].ToString() + "' and ZYWJM='" + filename + "'";
DAL.DBHelper.GetScalar(sql4);


//没有下载过
else

//积分-10
string sql2 = "update HYUser set HYJF=HYJF-10 where HYLoginName ='" + Session["UserName"].ToString() + "'";
DAL.DBHelper.GetScalar(sql2);

//保存下载的文件
string sql5 = "insert into TempZYXZ (HYUserName,ZYWJM,XZCS) values('" + Session["UserName"].ToString() + "','" + filename + "',1) select Id =@@IDENTITY;";
DAL.DBHelper.GetScalar(sql5);

Response.Flush();
Response.Clear();

Response.End();

else

Page.ClientScript.RegisterStartupScript(typeof(Page), "", "<script>alert('对不起,服务器正在升级!');window.close();;</script>");


else

Page.ClientScript.RegisterStartupScript(typeof(Page), "", "<script>alert('对不起,资源文件不存在或已被删除!');window.close();;</script>");

参考技术A var buffer1 = new WebClient().DownloadData("http://zhidao.baidu.com/question/205905738.html#here");

MemoryStream ms = new MemoryStream();
GZipStream compressedzipStream = new GZipStream(ms, CompressionMode.Compress);
compressedzipStream.Write(buffer1, 0, buffer1.Length);
compressedzipStream.Close();

var buffer2 = ms.ToArray();

FileStream fs = new FileStream(@"d:\baidu11.zip", FileMode.OpenOrCreate);
fs.Write(buffer2, 0, buffer2.Length);
fs.Close();
参考技术B 分三步
1. 取Stream
2. 读Steram到byte[]
3. 将byte[]保存到文件

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();

byte[] buffer = new Byte[response.ContentLength];
stream.Read(buffer, 0, buffer.Length);
stream.Close();

string path="......";
if (!File.Exists(path))

FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
fs.Write(buffer, 0, buffer.Length);
fs.Close();
参考技术C 楼上正解
string filePath="你要存放的文件地址";
FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write);
fs.Write(buffer, 0, buffer.Length);
fs.Close();

主要就是实例化一个文件流,然后把数据流写入到那个文件中

以上是关于用gzip压缩后怎么文件大小反而大了的主要内容,如果未能解决你的问题,请参考以下文章

怎么将pdf文件压缩到指定大小?

文件夹大小基本差不多,可为啥压缩出来的文件包却相差那么大?

如何压缩文件到最小

使用 tar gzip 或 zip 压缩的文件大小略有相同

GZip 压缩(通过 .net)可以增加文件大小吗?

linux之gzip命令