解压文件

来源:互联网 发布:ntp协议使用的端口 编辑:程序博客网 时间:2024/04/30 08:45

前段时间做了一个自动发布的程序,需要解压缩.zip 结尾的文件,今天要做一个解压.jar 的文件,把原来的解压.zip的代码找回来试试,也可以解压.jar 文件的.呵呵,实在是比较高兴!

  /// <summary>
        /// 解压缩一个 zip 文件。
        /// </summary>
        /// <param name="zipFileName">要解压的 zip 文件</param>
        /// <param name="extractLocation">zip 文件的解压目录</param>
        /// <param name="password">zip 文件的密码。</param>
        /// <param name="overWrite">是否覆盖已存在的文件。</param>
          
            private void UnZipDir(string zipFileName, string extractLocation, string password, bool overWrite)
            {
              
                string myExtractLocation = extractLocation;
                if (myExtractLocation == "")
                    myExtractLocation = Directory.GetCurrentDirectory();
                if (!myExtractLocation.EndsWith(@"/"))
                    myExtractLocation = myExtractLocation + @"/";
                ZipInputStream s = new ZipInputStream(File.OpenRead(zipFileName));
                s.Password = password;
                ZipEntry theEntry;
              
                while ((theEntry = s.GetNextEntry()) != null)//判断下一个zip 接口是否未空
                {
                    string directoryName = "";
                    string pathToZip = "";
                    pathToZip = theEntry.Name;

                    if (pathToZip != "")
                        directoryName = Path.GetDirectoryName(pathToZip) + @"/";
                    string fileName = Path.GetFileName(pathToZip);
                    Directory.CreateDirectory(myExtractLocation + directoryName);
                    if (fileName != "")
                    {
                        try
                        {
                            if ((File.Exists(myExtractLocation + directoryName + fileName) && overWrite) || (!File.Exists(myExtractLocation + directoryName + fileName)))
                            {
                                FileStream streamWriter = File.Create(myExtractLocation + directoryName + fileName);
                                int size = 2048;
                                byte[] data = new byte[2048];
                                while (true)
                                {
                                    size = s.Read(data, 0, data.Length);
                                    if (size > 0)
                                        streamWriter.Write(data, 0, size);
                                    else
                                        break;
                                }
                                streamWriter.Close();
                            }
                        }
                        catch (ZipException ex)
                        {
                            FileStream fs = new FileStream(AppDomain.CurrentDomain.BaseDirectory + "log.txt", FileMode.OpenOrCreate, FileAccess.Write);
                            StreamWriter sw = new StreamWriter(fs);
                            sw.WriteLine(ex.Message);
                        }
                    }
                }
                s.Close();
              
            }

原创粉丝点击