您的位置:首页 > 编程语言 > C#

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

2012-06-19 15:38 483 查看
//以下代码可以实现从指定目录批量压缩文件

        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);

            }

            //

        }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# string exception path csv null