• 压缩/解压文件


    引用的dll:ICSharpCode.SharpZipLib.dll

    压缩

      static void Main(string[] args)
            {
                string ZipPath = @"D:TESTConsoleApp3ConsoleApp3inDebug2";
                string dzhjZipPath = Path.Combine(ZipPath, string.Format("{0:yyyyMMddHHmmss}", DateTime.Now) + ".zip");
                //WriteFile(ZipPath);//往文件夹里面放文件
                ZipFloClass zc = new ZipFloClass();
                zc.ZipFile(ZipPath, dzhjZipPath);
            }

    帮助类

    using System;
    using System.IO;
    using ICSharpCode.SharpZipLib.Checksums;
    using ICSharpCode.SharpZipLib.Zip;
    
    namespace ConsoleApp3
    {
        public class ZipFloClass
        {
            public void ZipFile(string strFile, string strZip)
            {
                if (strFile[strFile.Length - 1] != Path.DirectorySeparatorChar)
                    strFile += Path.DirectorySeparatorChar;
                ZipOutputStream s = new ZipOutputStream(File.Create(strZip));
                s.SetLevel(6); // 0 - store only to 9 - means best compression   
                zip(strFile, s, strFile, strZip);
                s.Finish();
                s.Close();
            }
    
    
            private void zip(string strFile, ZipOutputStream s, string staticFile, string strZip)
            {
                if (strFile[strFile.Length - 1] != Path.DirectorySeparatorChar) strFile += Path.DirectorySeparatorChar;
                Crc32 crc = new Crc32();
                string[] filenames = Directory.GetFileSystemEntries(strFile);
                FileStream fs = null;
                ZipEntry entry = null;
                foreach (string file in filenames)
                {
    
                    if (Directory.Exists(file))
                    {
                        zip(file, s, staticFile, strZip);
                    }
                    else if (file == strZip)
                    {
                        continue;
                    }
                    else // 否则直接压缩文件   
                    {
                        //打开压缩文件  
                        FileInfo fi = new FileInfo(file);
                        fs = fi.OpenRead();
                        byte[] buffer = new byte[fs.Length];
                        fs.Read(buffer, 0, buffer.Length);
                        string tempfile = file.Substring(staticFile.LastIndexOf("\") + 1);
                        entry = new ZipEntry(tempfile);
                        entry.DateTime = DateTime.Now;
                        entry.Size = fs.Length;
                        fs.Close();
                        crc.Reset();
                        crc.Update(buffer);
                        entry.Crc = crc.Value;
                        s.PutNextEntry(entry);
                        s.Write(buffer, 0, buffer.Length);
                    }
                }
            }
        }
    }

     解压

     static void Main(string[] args)
            {
                UnZipFloClass ufc = new UnZipFloClass();
                string dzZip = @"D:TESTConsoleApp3ConsoleApp3inDebug220200410142512.zip";
                string ZipPath = @"D:TESTConsoleApp3ConsoleApp3inDebug2";
                ufc.unZipFile(dzZip, ZipPath + "\新建");//新建这个文件夹不需要存在,解压时会判断没有会自动生成,存在则会删除掉,在重新生成
    
            }

    帮助类

    using System;
    using System.IO;
    using ICSharpCode.SharpZipLib.Zip;
    
    namespace ConsoleApp3
    {
        public class UnZipFloClass
        {
            public string unZipFile(string TargetFile, string fileDir)
            {
                string rootFile = " ";
                try
                {
                    //读取压缩文件(zip文件),准备解压缩   
                    ZipInputStream s = new ZipInputStream(File.OpenRead(TargetFile.Trim()));
                    ZipEntry theEntry;
                    string path = fileDir;
                    //解压出来的文件保存的路径   
    
                    string rootDir = " ";
                    //根目录下的第一个子文件夹的名称   
                    while ((theEntry = s.GetNextEntry()) != null)
                    {
                        rootDir = Path.GetDirectoryName(theEntry.Name);
                        //得到根目录下的第一级子文件夹的名称   
                        if (rootDir.IndexOf("\") >= 0)
                        {
                            rootDir = rootDir.Substring(0, rootDir.IndexOf("\") + 1);
                        }
                        string dir = Path.GetDirectoryName(theEntry.Name);
                        //根目录下的第一级子文件夹的下的文件夹的名称   
                        string fileName = Path.GetFileName(theEntry.Name);
                        //根目录下的文件名称   
                        if (dir != " ")
                        //创建根目录下的子文件夹,不限制级别   
                        {
                            if (!Directory.Exists(fileDir + "\" + dir))
                            {
                                path = fileDir + "\" + dir;
                                //在指定的路径创建文件夹   
                                Directory.CreateDirectory(path);
                            }
                        }
                        else if (dir == " " && fileName != "")
                        //根目录下的文件   
                        {
                            path = fileDir;
                            rootFile = fileName;
                        }
                        else if (dir != " " && fileName != "")
                        //根目录下的第一级子文件夹下的文件   
                        {
                            if (dir.IndexOf("\") > 0)
                            //指定文件保存的路径   
                            {
                                path = fileDir + "\" + dir;
                            }
                        }
    
                        if (dir == rootDir)
                        //判断是不是需要保存在根目录下的文件   
                        {
                            path = fileDir + "\" + rootDir;
                        }
    
                        //以下为解压缩zip文件的基本步骤   
                        //基本思路就是遍历压缩文件里的所有文件,创建一个相同的文件。   
                        if (fileName != String.Empty)
                        {
                            FileStream streamWriter = File.Create(path + "\" + 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();
                        }
                    }
                    s.Close();
    
                    return rootFile;
                }
                catch (Exception ex)
                {
                    return "1; " + ex.Message;
                }
            }
        }
    }
  • 相关阅读:
    牛客前缀和题、枚举---[HNOI2003]激光炸弹
    牛客贪心题---拼数
    牛客枚举题---明明的随机数
    牛客模拟、差分题---校门外的树
    牛客贪心题---纪念品分组
    03_7_继承和权限控制
    03_6_package和import语句
    03_5_static关键字
    01_8_sql主键生成方式
    01_7_模糊查询实体对象
  • 原文地址:https://www.cnblogs.com/macT/p/12673299.html
Copyright © 2020-2023  润新知