您当前的位置: 首页 >  ar

衣舞晨风

暂无认证

  • 0浏览

    0关注

    1156博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C# 下利用ICSharpCode.SharpZipLib.dll实现文件/文件夹压缩、解压缩

衣舞晨风 发布时间:2014-07-23 21:35:38 ,浏览量:0

ICSharpCode.SharpZipLib.dll下载地址

1、压缩某个指定目录下日志,将日志压缩到CompressionDirectory文件夹中,并清除原来未压缩日志。

       #region 压缩logs目录下日志
        public static void CompresslogDic()
        {     
            try
            {
                string logFilePath = AppDomain.CurrentDomain.BaseDirectory + "logs";
                DirectoryInfo logsDic = new DirectoryInfo(logFilePath);
                FileInfo[] bipLog = logsDic.GetFiles();
                DateTime dt = DateTime.Now;
                List logsInOneDay = new List();
                for (int i = 0; i < bipLog.Length; i++)
                {
                    if (bipLog[i].Name.Substring(bipLog[i].Name.Length - 3) != "zip")
                    {
                        logsInOneDay.Add(bipLog[i]);
                    }
                }
                if (logsInOneDay.Count > 0)
                {
                    try
                    {
                        if (!Directory.Exists(logsDic.FullName + "\\CompressionDirectory"))
                        {
                            Directory.CreateDirectory(logsDic.FullName + "\\CompressionDirectory");
                        }
                        string compressFileName = dt.ToString("yyyy-MM-dd");
                        if (File.Exists(logsDic.FullName + "\\CompressionDirectory\\" + dt.ToString("yyyy-MM-dd") + ".zip"))
                        {
                            Guid guid = Guid.NewGuid();
                            compressFileName = compressFileName + "-" + guid.ToString();
                        }
                        compressFileName += ".zip";
                        Compress(logsInOneDay, logsDic.FullName + "\\CompressionDirectory\\" + compressFileName, 9, 100);
                        foreach (FileInfo fileInfo in logsInOneDay)
                        {
                            try
                            {
                                fileInfo.Delete();
                            }
                            catch (Exception e)
                            {
                                //错误信息记录处理
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        //错误信息记录处理
                    }
                }         
            }
            catch (Exception e)
            {
                //错误信息记录处理
            }        
        }
        #endregion
2、压缩指定目录子目录下日志,将日志压缩到CompressionDirectory文件夹中,并清除原来未压缩日志。

        #region 压缩logs子目录下日志
        public static void CompresslogsDic()
        {
            try
            {
                string logFilePath = AppDomain.CurrentDomain.BaseDirectory + "logs";               
                DirectoryInfo logsDic = new DirectoryInfo(logFilePath);
                FileInfo[] bipLog = logsDic.GetFiles();
                DateTime dt = DateTime.Now;
                DirectoryInfo[] subLosgDic = logsDic.GetDirectories();
                foreach (DirectoryInfo bankDic in subLosgDic)
                {
                    dt = DateTime.Now;
                    bipLog = bankDic.GetFiles();
                    List logsInOneDay = new List();
                    for (int i = 0; i < bipLog.Length; i++)
                    {
                        if (bipLog[i].Name.Substring(bipLog[i].Name.Length - 3) != "zip")
                        {
                            logsInOneDay.Add(bipLog[i]);
                        }
                    }
                    if (logsInOneDay.Count > 0)
                    {
                        try
                        {
                            if (!Directory.Exists(bankDic.FullName + "\\CompressionDirectory"))
                            {
                                Directory.CreateDirectory(bankDic.FullName + "\\CompressionDirectory");
                            }
                            string compressFileName = dt.ToString("yyyy-MM-dd");
                            if (File.Exists(bankDic.FullName + "\\CompressionDirectory\\" + dt.ToString("yyyy-MM-dd") + ".zip"))
                            {
                                Guid guid = Guid.NewGuid();
                                compressFileName = compressFileName + "-" + guid.ToString();
                            }
                            compressFileName += ".zip";
                            Compress(logsInOneDay, bankDic.FullName + "\\CompressionDirectory\\" + compressFileName, 9, 100);
                            foreach (FileInfo fileInfo in logsInOneDay)
                            {
                                try
                                {
                                    fileInfo.Delete();
                                }
                                catch (Exception e)
                                {
                                    //错误信息记录处理
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            //错误信息记录处理
                        }
                    }
                }             
            }
            catch (Exception e)
            {
                //错误信息记录处理
            }
        }
        #endregion
3、压缩文件

        #region 压缩文件
        /// 
        /// 压缩文件
        /// 
        /// 要打包的文件列表
        /// 目标文件名
        /// 压缩品质级别(0~9)
        /// 休眠时间(单位毫秒)     
        public static void Compress(List fileNames, string GzipFileName, int CompressionLevel, int SleepTimer)
        {
            ZipOutputStream s = new ZipOutputStream(File.Create(GzipFileName));
            try
            {
                s.SetLevel(CompressionLevel);   //0 - store only to 9 - means best compression
                foreach (FileInfo file in fileNames)
                {
                    FileStream fs = null;
                    try
                    {
                        fs = file.Open(FileMode.Open, FileAccess.ReadWrite);
                    }
                    catch
                    {
                        continue;
                    }
                    // 将文件分批读入缓冲区
                    byte[] data = new byte[2048];
                    int size = 2048;
                    ZipEntry entry = new ZipEntry(Path.GetFileName(file.Name));
                    entry.DateTime = (file.CreationTime > file.LastWriteTime ? file.LastWriteTime : file.CreationTime);
                    s.PutNextEntry(entry);
                    while (true)
                    {
                        size = fs.Read(data, 0, size);
                        if (size             
关注
打赏
1647422595
查看更多评论
0.0460s