C语言实现文件压缩

Posted

tags:

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

typedef int (WINAPI ICEPUB_COMPRESSFILE)(char *strFilename, char *strZipFilename);
ICEPUB_COMPRESSFILE *icePub_compressFile = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)

icePub_compressFile = (ICEPUB_COMPRESSFILE *)GetProcAddress(hDLLDrv, "icePub_compressFile");


if(icePub_compressFile)
icePub_compressFile("a.exe","a.Z");

if(hDLLDrv)
FreeLibrary(hDLLDrv);

typedef int (WINAPI ICEPUB_UNCOMPRESSFILE)(char *strZipFilename,char *strFilename);
ICEPUB_UNCOMPRESSFILE *icePub_uncompressFile = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)

icePub_uncompressFile = (ICEPUB_UNCOMPRESSFILE *)GetProcAddress(hDLLDrv, "icePub_uncompressFile");


if(icePub_uncompressFile)
icePub_uncompressFile("a.Z","a.exe");

if(hDLLDrv)
FreeLibrary(hDLLDrv);
参考技术A 有个开源的zlib,你下个吧

如何实现,读取远程文件,用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();

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

以上是关于C语言实现文件压缩的主要内容,如果未能解决你的问题,请参考以下文章

哈夫曼编码C语言实现

急求一道c语言编程的答案!!时间急迫!!快快!!

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

关于C语言中文本文件的逐行读取的实现

C语言编程对IPV6地址进行压缩算法用函数实现

C语言实现压缩二例