c# 指定目录批量压缩文件

//以下代码可以实现从指定目录批量压缩文件

        public static string GetFoldAll(string Path)
        {
            string str = "";
            DirectoryInfo thisOne = new DirectoryInfo(Path);
            DirectoryInfo[] subDirectories = thisOne.GetDirectories();//获得目录
            for (int i = 0; i < subDirectories.Length; i++)
            {
                str = ListTreeShow(subDirectories[i], 0, str);
            }
            return str;
        }
        /// <summary>
        /// 获取指定文件夹下所有子目录及文件函数
        /// </summary>
        /// <param name="theDir">指定目录</param>
        /// <param name="nLevel">默认起始值,调用时,一般为0</param>
        /// <param name="Rn">用于迭加的传入值,一般为空</param>
        /// <returns></returns>
        public static string ListTreeShow(DirectoryInfo theDir, int nLevel, string Rn)//递归目录 文件
        {
            try
            {
                DirectoryInfo[] subDirectories = theDir.GetDirectories();//获得目录
                foreach (DirectoryInfo dirinfo in subDirectories)
                {
                    FileInfo[] fileInfo = dirinfo.GetFiles(); //目录下的文件
                    foreach (FileInfo fInfo in fileInfo)
                    {
                            string filepath = dirinfo.FullName + "\\" + fInfo.Name;
                            //时间部分判断 文件是否删除
                            string suffix = "";
                            DateTime dt = DateTime.Now;
                            string[] fielName = fInfo.Name.Split('.');
                            string linedate = fielName[0].Split('_')[fielName[0].Split('_').Length - 1];//获取文件名称中的时间部分
                            if (fielName.Length > 2)
                            {
                                suffix = fielName[2];
                            }
                            else
                            {
                                suffix = fielName[1];
                            }
                            if (linedate == "rev")
                            {
                                dt = DateTime.ParseExact(fielName[0].Split('_')[fielName[0].Split('_').Length - 2], "yyyyMMdd", null);
                            }
                            else
                            {
                                dt = DateTime.ParseExact(linedate, "yyyyMMdd", null);
                            }
                            DateTime time = DateTime.Now;
                            if (dt < time.AddYears(-1))//以当前时间为基础,早于一年的报表删掉
                            {
                                DeleteFile(filepath);
                            }
                            if (dt.AddDays(1) < time)
                            {
                                if (suffix == "txt" || suffix == "csv")
                                {
                                    ZipIt(filepath);
                                    DeleteFile(filepath);
                                }
                            }
                        }
                        Rn = ListTreeShow(dirinfo, nLevel + 1, Rn);
                }
            }
            catch (Exception ex)
            {
                log.Info(ex);
            }
            return Rn;
        }

        private static String ZipIt(String filename)
        {
            ZipFile zipfile = new ZipFile(System.Text.Encoding.Default);
            string zipname = "";
            try
            {
                //压缩文件
                zipfile.AddFile(filename, "");
                zipfile.Save(filename + ".zip");
                Console.WriteLine("zip the file: {0} success!", filename);
                string[] fname = zipfile.Name.Split('\\');
                zipname = fname[fname.Length - 1];
            }
            catch (Exception ex)
            {
                log.Info(ex);
                Console.WriteLine("error occurred! ex={0}", ex);
                //throw ex;
            }
            log.Info("文件压缩成功,文件名为:" + filename);
            return zipname;
        }
        private static void DeleteFile(string txtedfolder)
        {
            //foreach (string file in Directory.GetFiles(zipedfolder))
            //{
            try
            {
                File.Delete(txtedfolder);
                log.Info("成功删除" + txtedfolder);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                log.Info("删除文件失败:" + ex);
            }
            //
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值