zoukankan      html  css  js  c++  java
  • 文件压缩

    using ICSharpCode.SharpZipLib.Zip;
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace NEEA.CET.Common
    {
      public  class ZipManager
        {
            #region 压缩
            /// 
            /// 压缩文件,默认目录为当前目录,文件名为当前目录名,压缩级别为6
            /// 
            /// 要压缩的文件或文件夹
            public void Zip(params string[] fileOrDirectory)
            {
                Zip(6, fileOrDirectory);
            }
    
            /// 
            /// 压缩文件,默认目录为当前目录,文件名为当前目录名
            /// 
            /// 压缩的级别
            /// 要压缩的文件或文件夹
            public void Zip(int zipLevel, params string[] fileOrDirectory)
            {
                if (fileOrDirectory == null)
                    return;
                else if (fileOrDirectory.Length < 1)
                    return;
                else
                {
                    string str = fileOrDirectory[0];
                    if (str.EndsWith("\"))
                        str = str.Substring(0, str.Length - 1);
                    str += ".zip";
                    Zip(str, zipLevel, fileOrDirectory);
                }
            }
            /// 
            /// 压缩文件,默认目录为当前目录
            /// 
            /// 压缩后的文件
            /// 压缩的级别
            /// 要压缩的文件或文件夹
            public void ZipUsePassword(string zipedFileName, int zipLevel, string passWord, params string[] fileOrDirectory)
            {
                if (fileOrDirectory == null)
                    return;
                else if (fileOrDirectory.Length < 1)
                    return;
                else
                {
                    string str = fileOrDirectory[0];
                    if (str.EndsWith("\"))
                        str = str.Substring(0, str.Length - 1);
                    str = str.Substring(0, str.LastIndexOf("\"));
                    Zip(zipedFileName, str, zipLevel, passWord, fileOrDirectory);
                }
            }
            public void Zip(string zipedFileName, string currentDirectory, int zipLevel, string passWord, params string[] fileOrDirectory)
            {
                ArrayList AllFiles = new ArrayList();
    
                //获取所有文件
                if (fileOrDirectory != null)
                {
                    for (int i = 0; i < fileOrDirectory.Length; i++)
                    {
                        if (File.Exists(fileOrDirectory[i]))
                            AllFiles.Add(fileOrDirectory[i]);
                        else if (Directory.Exists(fileOrDirectory[i]))
                            GetDirectoryFile(fileOrDirectory[i], AllFiles);
                    }
                }
    
                if (AllFiles.Count < 1)
                    return;
    
                ZipOutputStream zipedStream = new ZipOutputStream(File.Create(zipedFileName));
                zipedStream.SetLevel(zipLevel);
                if (!string.IsNullOrEmpty(passWord))
                {
                    zipedStream.Password = passWord;
                }
    
                for (int i = 0; i < AllFiles.Count; i++)
                {
                    string file = AllFiles[i].ToString();
                    FileStream fs;
    
                    //打开要压缩的文件
                    //try
                    //{
                    fs = File.OpenRead(file);
                    //}
                    //catch
                    //{
                    //    continue;
                    //}
    
                    try
                    {
                        byte[] buffer = new byte[fs.Length];
                        fs.Read(buffer, 0, buffer.Length);
    
                        //新建一个entry
                        string fileName = file.Replace(currentDirectory, "");
                        if (fileName.StartsWith("\"))
                            fileName = fileName.Substring(1);
                        ZipEntry entry = new ZipEntry(fileName.Replace(@"", @"/"));
                        entry.DateTime = DateTime.Now;
    
                        //保存到zip流
                        fs.Close();
                        zipedStream.PutNextEntry(entry);
                        zipedStream.Write(buffer, 0, buffer.Length);
                    }
                    //catch
                    //{
                    //}
                    finally
                    {
                        fs.Close();
                        fs.Dispose();
                    }
                }
    
                zipedStream.Finish();
                zipedStream.Close();
            }
            /// 
            /// 压缩文件,默认目录为当前目录
            /// 
            /// 压缩后的文件
            /// 压缩的级别
            /// 要压缩的文件或文件夹
            public void Zip(string zipedFileName, int zipLevel, params string[] fileOrDirectory)
            {
                if (fileOrDirectory == null)
                    return;
                else if (fileOrDirectory.Length < 1)
                    return;
                else
                {
                    string str = fileOrDirectory[0];
                    if (str.EndsWith("\"))
                        str = str.Substring(0, str.Length - 1);
                    str = str.Substring(0, str.LastIndexOf("\"));
                    Zip(zipedFileName, str, zipLevel, fileOrDirectory);
                }
            }
    
            /// 
            /// 压缩文件
            /// 
            /// 压缩后的文件
            /// 压缩的级别
            /// 当前所处目录
            /// 要压缩的文件或文件夹
            public void Zip(string zipedFileName, string currentDirectory, int zipLevel, params string[] fileOrDirectory)
            {
                ArrayList AllFiles = new ArrayList();
    
                //获取所有文件
                if (fileOrDirectory != null)
                {
                    for (int i = 0; i < fileOrDirectory.Length; i++)
                    {
                        if (File.Exists(fileOrDirectory[i]))
                            AllFiles.Add(fileOrDirectory[i]);
                        else if (Directory.Exists(fileOrDirectory[i]))
                            GetDirectoryFile(fileOrDirectory[i], AllFiles);
                    }
                }
    
                if (AllFiles.Count < 1)
                    return;
    
                ZipOutputStream zipedStream = new ZipOutputStream(File.Create(zipedFileName));
                zipedStream.SetLevel(zipLevel);
    
                for (int i = 0; i < AllFiles.Count; i++)
                {
                    string file = AllFiles[i].ToString();
                    FileStream fs;
    
                    //打开要压缩的文件
                    //try
                    //{
                    fs = File.OpenRead(file);
                    //}
                    //catch
                    //{
                    //    continue;
                    //}
    
                    try
                    {
                        byte[] buffer = new byte[fs.Length];
                        fs.Read(buffer, 0, buffer.Length);
    
                        //新建一个entry
                        string fileName = file.Replace(currentDirectory, "");
                        if (fileName.StartsWith("\"))
                            fileName = fileName.Substring(1);
                        ZipEntry entry = new ZipEntry(fileName.Replace(@"", @"/"));
                        entry.DateTime = DateTime.Now;
    
                        //保存到zip流
                        fs.Close();
                        zipedStream.PutNextEntry(entry);
                        zipedStream.Write(buffer, 0, buffer.Length);
                    }
                    //catch
                    //{
                    //}
                    finally
                    {
                        fs.Close();
                        fs.Dispose();
                    }
                }
    
                zipedStream.Finish();
                zipedStream.Close();
            }
    
    
            /// 
            /// 压缩文件夹
            /// 
            /// 当前所在的文件夹
            public void ZipDirectory(string curretnDirectory)
            {
                if (curretnDirectory == null)
                    return;
    
                string dir = curretnDirectory;
                if (dir.EndsWith("\"))
                    dir = dir.Substring(0, dir.Length - 1);
                string file = dir.Substring(dir.LastIndexOf("\") + 1) + ".zip";
                dir += "\" + file;
    
                Zip(dir, 6, curretnDirectory);
            }
    
    
            /// 
            /// 压缩文件夹
            /// 
            /// 当前所在的文件夹
            public void ZipDirectory(string curretnDirectory, int zipLevel)
            {
                if (curretnDirectory == null)
                    return;
    
                string dir = curretnDirectory;
                if (dir.EndsWith("\"))
                    dir = dir.Substring(0, dir.Length - 1);
                dir += ".zip";
    
                Zip(dir, zipLevel, curretnDirectory);
            }
    
    
            //递归获取一个目录下的所有文件
            private void GetDirectoryFile(string parentDirectory, ArrayList toStore)
            {
                string[] files = Directory.GetFiles(parentDirectory);
                for (int i = 0; i < files.Length; i++)
                    toStore.Add(files[i]);
                string[] directorys = Directory.GetDirectories(parentDirectory);
                for (int i = 0; i < directorys.Length; i++)
                    GetDirectoryFile(directorys[i], toStore);
            }
    
            //计算文件大小
            public static string CountSize(long Size)
            {
                string m_strSize = "";
                long FactSize = 0;
                FactSize = Size;
                if (FactSize < 1024.00)
                    m_strSize = FactSize.ToString("F2") + " Byte";
                else if (FactSize >= 1024.00 && FactSize < 1048576)
                    m_strSize = (FactSize / 1024.00).ToString("F2") + " K";
                else if (FactSize >= 1048576 && FactSize < 1073741824)
                    m_strSize = (FactSize / 1024.00 / 1024.00).ToString("F2") + " M";
                else if (FactSize >= 1073741824)
                    m_strSize = (FactSize / 1024.00 / 1024.00 / 1024.00).ToString("F2") + " G";
                return m_strSize;
            }
            #endregion
    
            #region 解压
            /// <summary>
            /// 解压文件
            /// </summary>
            /// <param name="ZipPath">被解压的文件路径</param>
            /// <param name="Path">解压后文件的路径</param>
            public void UnZip(string ZipPath, string Path)
            {
                ZipInputStream s = new ZipInputStream(File.OpenRead(ZipPath));
    
                ZipEntry theEntry;
                try
                {
                    while ((theEntry = s.GetNextEntry()) != null)
                    {
                        string fileName = System.IO.Path.GetFileName(theEntry.Name);
    
                        //生成解压目录
                        string folderName = System.IO.Path.GetDirectoryName(theEntry.Name);
                        if (!Directory.Exists(Path + folderName))
                        {
                            Directory.CreateDirectory(Path + folderName);
                        }
    
                        if (!string.IsNullOrEmpty(fileName))
                        {
                            //解压文件
                            FileStream streamWriter = File.Create(Path + theEntry);
    
                            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
                                {
    
                                    streamWriter.Close();
                                    streamWriter.Dispose();
                                    break;
                                }
                            }
    
                            streamWriter.Close();
                            streamWriter.Dispose();
                        }
                    }
                }
                catch (Exception ex)
                {
                    ex._Log();
                    throw;
                }
                finally
                {
                    s.Close();
                    s.Dispose();
                }
            }
    
            #endregion
        }
    }
    
  • 相关阅读:
    【UOJ 53】线段树区间修改
    【洛谷 1057】传球游戏
    【洛谷 2430】严酷的训练
    【UOJ 51】最接近神的人
    【洛谷 1908】逆序对
    【UOJ 50】树状数组2
    Kafka单机安装
    Linux查看磁盘使用情况命令
    CentOS7查看和关闭防火墙
    Kafka学习(三)——Java工具类、Springboot集成批量消费、SparkStreaming集成
  • 原文地址:https://www.cnblogs.com/ZX-LMY/p/9456165.html
Copyright © 2011-2022 走看看