e){entryTotal=e.Item.Size;info_builde1="提取文件:"e.Item.Key";";}privatevoidarchive_FilePartExtractionBegin(objectsender,FilePartExtractionBeginEventArgse){partTotal=e.Size;info_builde2="分卷:"e.Name";";}privatevoidarchive_CompressedBytesRead(objectsender,CompressedBytesReadEventArgse){stringpercentage=entryTotal.HasValue?CreatePercentage(e.CompressedBytesRead,entryTotal.Value).ToString():"Unknown";info_builde=info_builde1info_builde2"字节:"e.CompressedBytesRead";百分比:"percentage"%";this.CrossThreadCalls(()=>{compress_Info.Text=info_builde;progress[1].Value=int.Parse(percentage)>100||int.Parse(percentage)<0?100:int.Parse(percentage);if(volumes<2)progress[0].Value=progress[1].Value;Application.DoEvents();});}privateintCreatePercentage(longn,longd){return(int)(((double)n/(double)d)*100);}-IMDN开发者社群-imdn.cn"> e){entryTotal=e.Item.Size;info_builde1="提取文件:"e.Item.Key";";}privatevoidarchive_FilePartExtractionBegin(objectsender,FilePartExtractionBeginEventArgse){partTotal=e.Size;info_builde2="分卷:"e.Name";";}privatevoidarchive_CompressedBytesRead(objectsender,CompressedBytesReadEventArgse){stringpercentage=entryTotal.HasValue?CreatePercentage(e.CompressedBytesRead,entryTotal.Value).ToString():"Unknown";info_builde=info_builde1info_builde2"字节:"e.CompressedBytesRead";百分比:"percentage"%";this.CrossThreadCalls(()=>{compress_Info.Text=info_builde;progress[1].Value=int.Parse(percentage)>100||int.Parse(percentage)<0?100:int.Parse(percentage);if(volumes<2)progress[0].Value=progress[1].Value;Application.DoEvents();});}privateintCreatePercentage(longn,longd){return(int)(((double)n/(double)d)*100);} - IMDN开发者社群-imdn.cn">
登录
首页 » C# » 解压缩文件示例(rar、zip、7zip、Gzip、tar...等)

解压缩文件示例(rar、zip、7zip、Gzip、tar...等)

于 2019-07-21 发布
0 121
下载积分: 1 下载次数: 1

代码说明:

本程序是基于 sharpcompress-master 设计的演示程序。开原地址:https://github.com/adamhathcock/sharpcompress。1. 程序主要展示了压缩文件的解压缩,支持的文件类型有:rar、zip、7zip、Gzip、tar......等压缩格式,展示了密码解压、分卷解压、解压进度等功能。2. 不支持“带密码的分卷压缩文件”的解压;无密码分卷压缩、单个带密码文件正常解压。3. 此程序在设计中,对组件源代码进行了修改,与原组件代码对照查看。4、sharpcompress-master组件功能繁多,比如,文件压缩为图片、压缩文件内文件添加删除、更名等等,对照现有的压缩软件,功能均具备,可在代码中查看使用。本示例只是展示了解压缩功能。此程序为识别全部压缩格式,未引用DLL,全部为cs文件,如有错误,自行对照修正。private void Uncompress(string archiveFile, string destinationPath, string password = null) { var archive = ArchiveFactory.Open(archiveFile, new ReaderOptions() { Password = password, LeaveStreamOpen = true }); volumes = archive.Entries.Count(); archive.EntryExtractionBegin = archive_EntryExtractionBegin; archive.FilePartExtractionBegin = archive_FilePartExtractionBegin; archive.CompressedBytesRead = archive_CompressedBytesRead; Task.Run(() => { long order = 0; foreach (var entry in archive.Entries) { if (!entry.IsDirectory) { entry.WriteToDirectory(destinationPath, new ExtractionOptions() { ExtractFullPath = true, Overwrite = true, }); } order ; this.CrossThreadCalls(() => { if (volumes > 1) { progress[0].Value = CreatePercentage(order, volumes); } }); } MessageBox.Show("解压缩任务完成 !"); }); } private void archive_EntryExtractionBegin(object sender, ArchiveExtractionEventArgs e) { entryTotal = e.Item.Size; info_builde1 = "提取文件: " e.Item.Key ";"; } private void archive_FilePartExtractionBegin(object sender, FilePartExtractionBeginEventArgs e) { partTotal = e.Size; info_builde2 = "分卷:" e.Name ";"; } private void archive_CompressedBytesRead(object sender, CompressedBytesReadEventArgs e) { string percentage = entryTotal.HasValue ? CreatePercentage(e.CompressedBytesRead, entryTotal.Value).ToString() : "Unknown"; info_builde = info_builde1 info_builde2 "字节:" e.CompressedBytesRead ";百分比:" percentage "%"; this.CrossThreadCalls(() => { compress_Info.Text = info_builde; progress[1].Value = int.Parse(percentage) > 100 || int.Parse(percentage) < 0 ? 100 : int.Parse(percentage); if (volumes < 2) progress[0].Value = progress[1].Value; Application.DoEvents(); }); } private int CreatePercentage(long n, long d) { return (int)(((double)n / (double)d) * 100); }

下载说明:请别用迅雷下载,失败请重下,重下不扣分!

发表评论

0 个回复

  • 696524资源总数
  • 103945会员总数
  • 46今日下载