C# zip -ICSharpCode.SharpZipLib
利用第三方组件 ICSharpCode.SharpZipLib download from: https://github.com/icsharpcode/SharpZipLib
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- using System.Diagnostics;
- using System.IO;
- using System.ComponentModel;
- using ICSharpCode.SharpZipLib.Checksums;
- using ICSharpCode.SharpZipLib.Zip;
- namespace OnlineUpdate
- {
- /// <summary>
- /// Interaction logic for MainWindow.xaml
- /// </summary>
- public partial class MainWindow : Window
- {
- public MainWindow()
- {
- InitializeComponent();
- String[] arguments = Environment.GetCommandLineArgs();
- bool valid = false;
- foreach (string s in arguments)
- { //arguments =update|serverUrl|mainAPP
- if (s.StartsWith ( "update|"))
- {
- serverUrl = s.Split ('|')[1].Trim() ;
- mainAPP = s.Split('|')[2].Trim();
- valid = true;
- }
- }
- if (!valid)
- {
- Application.Current.Shutdown();
- }
- worker = new BackgroundWorker();
- worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted); ;
- worker.DoWork += new DoWorkEventHandler(worker_DoWork);
- Loaded += new RoutedEventHandler(MainWindow_Loaded);
- }
- string AppFolder = AppDomain.CurrentDomain.BaseDirectory;
- string mainAPP = "xx.exe";
- string serverUrl = "";
- BackgroundWorker worker;
- bool isDownloadOK = false;
- void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
- {
- if (isDownloadOK)
- {
- copyFiles();
- }
- }
- void worker_DoWork(object sender, DoWorkEventArgs e)
- {
- dowloadFile();
- }
- private static string UpdateZipFile = "Update.rar";
- void MainWindow_Loaded(object sender, RoutedEventArgs e)
- {
- int tryCont=0;
- closedMainApp();
- while (!checkHasClosedMainApp())
- {
- tryCont++;
- MessageBox.Show("请关闭["+mainAPP.Replace(".exe","")+"]再试!" );
- if(tryCont>3){
- MessageBox.Show("无法关闭" + mainAPP.Replace(".exe", "") + ".无法继续更新");
- Application.Current.Shutdown();
- break ;
- }
- }
- Show();
- //start download update
- worker.RunWorkerAsync();
- }
- void dowloadFile()
- {
- isDownloadOK = false;
- string StrFileName = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, UpdateZipFile);
- // string serverUrl = "http://files.cnblogs.com/files/pcat/hackbar.zip";//"https://files.cnblogs.com/files/wgscd/jyzsUpdate.zip"; //根据实际情况设置
- System.IO.FileStream fs;
- fs = new System.IO.FileStream(StrFileName, System.IO.FileMode.Create);
- try
- {
- System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(serverUrl);
- System.Net.WebResponse response = request.GetResponse();
- System.IO.Stream ns = response.GetResponseStream();
- long totalSize = response.ContentLength;
- long hasDownSize = 0;
- byte[] nbytes = new byte[512];//521,2048 etc
- int nReadSize = 0;
- nReadSize = ns.Read(nbytes, 0, nbytes.Length);
- while (nReadSize > 0)
- {
- fs.Write(nbytes, 0, nReadSize);
- nReadSize = ns.Read(nbytes, 0, 512);
- hasDownSize += nReadSize;
- Dispatcher.BeginInvoke(new Action(() =>
- {
- txt.Text = "" + hasDownSize + "/" + totalSize + " (" + (((double)hasDownSize * 100 / totalSize).ToString("0")) + "%)";//显示下载百分比
- lbPercent.Width = gridPercent.RenderSize.Width * ((double)hasDownSize / totalSize);
- txt.UpdateLayout();//DoEvents();
- }));
- }
- Dispatcher.BeginInvoke(new Action(() =>
- {
- txt.Text = "100%";//显示下载百分比
- txt.UpdateLayout();//DoEvents();
- }));
- fs.Close();
- ns.Close();
- isDownloadOK = true;
- // MessageBox.Show("下载完成");
- }
- catch (Exception ex)
- {
- fs.Close();
- MessageBox.Show("出现错误:" + ex.ToString());
- }
- }
- void copyFiles() {
- try
- {
- txt.Text = "正在复制解压文件......";
- txt2.Visibility = System.Windows.Visibility.Collapsed;
- gridPercent.Visibility = System.Windows.Visibility.Collapsed;
- UnZip(UpdateZipFile, AppFolder, "", true);
- txt.Text = "更新完成!";
- txt.FontSize = 55;
- txt.Foreground = new SolidColorBrush(Colors.Green);
- MessageBox.Show("恭喜更新完成!");
- string mainApp = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, mainAPP);
- System.Diagnostics.Process.Start(mainApp);
- Application.Current.Shutdown();
- }
- catch(Exception ex) {
- MessageBox.Show("更新出错:\r\n"+ex.Message );
- Application.Current.Shutdown();
- }
- }
- /// <summary>
- /// ZIP:解压一个zip文件
- /// add yuangang by 2016-06-13
- /// </summary>
- /// <param name="ZipFile">需要解压的Zip文件(绝对路径)</param>
- /// <param name="TargetDirectory">解压到的目录</param>
- /// <param name="Password">解压密码</param>
- /// <param name="OverWrite">是否覆盖已存在的文件</param>
- public static void UnZip(string ZipFile, string TargetDirectory, string Password, bool OverWrite = true)
- {
- //如果解压到的目录不存在,则报错
- if (!System.IO.Directory.Exists(TargetDirectory))
- {
- System.IO.Directory.CreateDirectory(TargetDirectory);
- //throw new System.IO.FileNotFoundException("指定的目录: " + TargetDirectory + " 不存在!");
- }
- //目录结尾
- if (!TargetDirectory.EndsWith("\\")) { TargetDirectory = TargetDirectory + "\\"; }
- using (ZipInputStream zipfiles = new ZipInputStream(File.OpenRead(ZipFile)))
- {
- zipfiles.Password = Password;
- ZipEntry theEntry;
- while ((theEntry = zipfiles.GetNextEntry()) != null)
- {
- string directoryName = "";
- string pathToZip = "";
- pathToZip = theEntry.Name;
- if (pathToZip != "")
- directoryName = System.IO.Path.GetDirectoryName(pathToZip) + "\\";
- string fileName = System.IO.Path.GetFileName(pathToZip);
- Directory.CreateDirectory(TargetDirectory + directoryName);
- if (fileName != "")
- {
- if ((File.Exists(TargetDirectory + directoryName + fileName) && OverWrite) || (!File.Exists(TargetDirectory + directoryName + fileName)))
- {
- using (FileStream streamWriter = File.Create(TargetDirectory + directoryName + fileName))
- {
- int size = 2048;
- byte[] data = new byte[2048];
- while (true)
- {
- size = zipfiles.Read(data, 0, data.Length);
- if (size > 0)
- streamWriter.Write(data, 0, size);
- else
- break;
- }
- streamWriter.Close();
- }
- }
- }
- }
- zipfiles.Close();
- }
- }
- /// <summary>
- /// 断点续传
- /// </summary>
- void dowloadFileWithCache()
- {
- string StrFileName = "d:\\wgscd2.zip"; //根据实际情况设置
- string StrUrl = "http://files.cnblogs.com/files/pcat/hackbar.zip";//"https://files.cnblogs.com/files/wgscd/xxx.zip"; //根据实际情况设置
- //打开上次下载的文件或新建文件
- long lStartPos = 0;
- System.IO.FileStream fs;
- if (System.IO.File.Exists(StrFileName))//另外如果文件已经下载完毕,就不需要再断点续传了,不然请求的range 会不合法会抛出异常。
- {
- fs = System.IO.File.OpenWrite(StrFileName);
- lStartPos = fs.Length;
- fs.Seek(lStartPos, System.IO.SeekOrigin.Current); //移动文件流中的当前指针
- }
- else
- {
- fs = new System.IO.FileStream(StrFileName, System.IO.FileMode.Create);
- lStartPos = 0;
- }
- //打开网络连接
- try
- {
- System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(StrUrl);
- if (lStartPos > 0)
- {
- request.AddRange((int)lStartPos); //设置Range值
- }
- System.Net.WebResponse response = request.GetResponse();
- //向服务器请求,获得服务器回应数据流
- System.IO.Stream ns = response.GetResponseStream();
- long totalSize = response.ContentLength;
- long hasDownSize = 0;
- byte[] nbytes = new byte[512];//521,2048 etc
- int nReadSize = 0;
- nReadSize = ns.Read(nbytes, 0, nbytes.Length);
- while (nReadSize > 0)
- {
- fs.Write(nbytes, 0, nReadSize);
- nReadSize = ns.Read(nbytes, 0, 512);
- hasDownSize += nReadSize;
- txt.Text = "" + hasDownSize + "/" + totalSize + " (" + (((double)hasDownSize * 100 / totalSize).ToString("0.00")) + "%)";//显示下载百分比
- txt.UpdateLayout();//DoEvents();
- }
- fs.Close();
- ns.Close();
- MessageBox.Show("下载完成");
- }
- catch (Exception ex)
- {
- fs.Close();
- MessageBox.Show("下载过程中出现错误:" + ex.ToString());
- }
- }
- bool checkHasClosedMainApp()
- {
- string path = "";
- Process[] ps = Process.GetProcessesByName(mainAPP.Replace(".exe",""));
- //string n= Process.GetCurrentProcess().MainModule.FileName;
- foreach (Process p in ps)
- {
- path = p.MainModule.FileName.ToString();
- return false;
- }
- return true;
- }
- void closedMainApp()
- {
- string path = "";
- Process[] ps = Process.GetProcessesByName(mainAPP.Replace(".exe", ""));
- //string n= Process.GetCurrentProcess().MainModule.FileName;
- foreach (Process p in ps)
- {
- path = p.MainModule.FileName.ToString();
- p.CloseMainWindow();
- System.Threading.Thread.Sleep(1000);
- }
- }
- }
- }
C# zip -ICSharpCode.SharpZipLib的更多相关文章
- zip (ICSharpCode.SharpZipLib.dll文件需要下载)
ZipClass zc=new ZipClass (); zc.ZipDir(@"E:\1\新建文件夹", @"E:\1\新建文件夹.zip", 1);//压缩 ...
- 使用NPOI读取Excel报错ICSharpCode.SharpZipLib.Zip.ZipException:Wrong Local header signature
写了一个小程序利用NPOI来读取Excel,弹出这样的报错: ICSharpCode.SharpZipLib.Zip.ZipException:Wrong Local header signature ...
- C#调用 ICSharpCode.SharpZipLib.Zip 实现解压缩功能公用类
最近想用个解压缩功能 从网上找了找 加自己修改,个人感觉还是比较好用的,直接上代码如下 using System; using System.Linq; using System.IO; using ...
- ICSharpCode.SharpZipLib.dll,MyZip.dll,Ionic.Zip.dll 使用
MyZip.dll : 有BUG,会把子目录的文件解压到根目录.. ICSharpCode.SharpZipLib.dll: 把ICSharpCode.SharpZipLib.dll复制一份,重命名为 ...
- 利用ICSharpCode.SharpZipLib.Zip进行文件压缩
官网http://www.icsharpcode.net/ 支持文件和字符压缩. 创建全新的压缩包 第一步,创建压缩包 using ICSharpCode.SharpZipLib.Zip; ZipOu ...
- C# zip/unzip with ICSharpCode.SharpZipLib
download ICSharpCode and add reference using System; using System.Collections.Generic; using System. ...
- 使用ICSharpCode.SharpZipLib.Zip实现压缩与解压缩
使用开源类库ICSharpCode.SharpZipLib.Zip可以实现压缩与解压缩功能,源代码和DLL可以从http://www.icsharpcode.net/OpenSource/SharpZ ...
- ICSharpCode.SharpZipLib.Zip
//压缩整个目录下载 var projectFolder = Request.Params["folder"] != null ? Request.Params["fol ...
- 基于ICSharpCode.SharpZipLib.Zip的压缩解压缩
原文:基于ICSharpCode.SharpZipLib.Zip的压缩解压缩 今天记压缩解压缩的使用,是基于开源项目ICSharpCode.SharpZipLib.Zip的使用. 一.压缩: /// ...
随机推荐
- Android为TV端助力 doc里面adb连接出现问题的解决方法
第一保证连接的两边都是有网的 第二 就是网上常说的1.adb kill-server 2.adb start-server 3.adb remount 但是在运行adb remount有可能会提示 ...
- Django+MongoDB批量插入数据
在百万级和千万级数据级别进行插入,pymongo的insert_many()方法有着很强的优势.原因是每次使用insert_one()方法进行插入数据,都是要对数据库服务器进行一次访问,而这样的访问是 ...
- swipe使用及竖屏页面滚动方法
基于swipe4写了一个移动端的全屏滚动效果 但是图片始终不能自适应屏幕设备大小 这里记录一下 开始的时候要设置 移动端配置 <meta name="viewport" ...
- 自动化测试基础篇--Selenium获取元素属性
摘自https://www.cnblogs.com/sanzangTst/p/8375938.html 通常在做断言之前,都要先获取界面上元素的属性,然后与期望结果对比. 一.获取页面title 二. ...
- 初识kafka
简介 Kafka经常用于实时流数据架构,用于提供实时分析.本篇将会简单介绍kafka以及它为什么能够广泛应用. kafka的增长是爆炸性的.2017年超过三分之一的世界五百强公司在使用kafk ...
- Lua无法排序的问题(Key需要是连续的)
排序的Key需要是连续的 local x = {[1]={x=6}, [2]={x=5}, [3]={x=7}, [5]={x=2}, [6]={x=8}, [7]={x=5}} ---从小到大排序 ...
- live555源码学习1---Socket流程架构图
怎么说呢,换了工作环境,好多软件公司禁止使用了,有道笔记也无法使用了.发现博客园还可以上传图片,以后只能在这里记录了. 越发的感觉需要尽快把live555的代码拿下.因为工作环境问题,webrtc的源 ...
- Git&GitHub语法大全
目录 1. GitHub与Git万用语法 1)创建库 2)添加和提交到仓库 3)版本回退 4)缓存区和暂存区 5)撤销和删除文件 6)远程仓库 7)创建和合并分支 2. 更多Git语法 1. GitH ...
- 力扣算法题—051N皇后问题
#include "000库函数.h" //使用回溯法来计算 //经典解法为回溯递归,一层一层的向下扫描,需要用到一个pos数组, //其中pos[i]表示第i行皇后的位置,初始化 ...
- Java数据结构简述
1.数组 概念:一个存储元素的线性集合. 数组声明和创建: dataType[] arrayRefVar = new dataType[arraySize]; 二维数组(多维数组)声明和创建: dat ...