遍历文件夹及其子文件夹下的.pdf文件,并解压文件夹下所有的压缩包

  List<PDFPATH> pdfpath = new List<PDFPATH>();

        List<string> ziplist = new List<string>();

        public Form1()

        {

            InitializeComponent();

        }



        private void button1_Click(object sender, EventArgs e)

        {

            FolderBrowserDialog dialog = new FolderBrowserDialog();

            dialog.Description = "请选择文件路径";

            if (dialog.ShowDialog() == DialogResult.OK)

            {

                string foldPath = dialog.SelectedPath;

                ListFilesZIPandRaR(new DirectoryInfo(foldPath));

                foreach (string p in ziplist)

                {

                    UnpackFile(p, p.Substring(0,p.LastIndexOf('\\')));

                }



                ListFilesPDF(new DirectoryInfo(foldPath));

                dataGridView1.DataSource = pdfpath;

            }



        }

        /// <summary>

        /// 获取文件夹及其子文件夹下的所有pdf

        /// </summary>

        /// <param name="info"></param>

        public void  ListFilesPDF(FileSystemInfo info)

        {

            

            if (!info.Exists) return;



            DirectoryInfo dir = info as DirectoryInfo;

            //不是目录

            if (dir == null) return;



            FileSystemInfo[] files = dir.GetFileSystemInfos();

            for (int i = 0; i < files.Length; i++)

            {

                FileInfo file = files[i] as FileInfo;

                //是文件

                if (file != null)

                {

                    //Console.WriteLine(file.FullName + "\t " + file.Length);

                    if (file.FullName.Substring(file.FullName.LastIndexOf(".")) == ".pdf")

                    //此处为显示JPG格式,不加IF可遍历所有格式的文件

                    {

                        PDFPATH p = new PDFPATH();

                        p.path = file.FullName;

                        pdfpath.Add(p );

                    }



                }

                //对于子目录,进行递归调用

                else

                {

                    ListFilesPDF(files[i]);

                }



            }



        }



        /// <summary>

        /// 获取文件夹及其子文件夹下的所有ZIP,RaR

        /// </summary>

        /// <param name="info"></param>

        public void ListFilesZIPandRaR(FileSystemInfo info)

        {



            if (!info.Exists) return;



            DirectoryInfo dir = info as DirectoryInfo;

            //不是目录

            if (dir == null) return;



            FileSystemInfo[] files = dir.GetFileSystemInfos();

            for (int i = 0; i < files.Length; i++)

            {

                FileInfo file = files[i] as FileInfo;

                //是文件

                if (file != null)

                {

                    //Console.WriteLine(file.FullName + "\t " + file.Length);

                    if (file.FullName.Substring(file.FullName.LastIndexOf(".")) == ".zip" || file.FullName.Substring(file.FullName.LastIndexOf(".")) == ".rar")

                    //此处为显示JPG格式,不加IF可遍历所有格式的文件

                    {

                        ziplist.Add(file.FullName);

                    }



                }

                //对于子目录,进行递归调用

                else

                {

                    ListFilesZIPandRaR(files[i]);

                }



            }



        }

        #region 解压 文件 zip 格式 rar 格式

        /// <summary>

        ///解压文件

        /// </summary>

        /// <param name="fileFromUnZip">解压前的文件路径(绝对路径)</param>

        /// <param name="fileToUnZip">解压后的文件目录(绝对路径)</param>

        public static void UnpackFile(string fileFromUnZip, string fileToUnZip)

        {

             

            //获取压缩类型

            string unType = fileFromUnZip.Substring(fileFromUnZip.LastIndexOf(".") + 1, 3).ToLower();

            switch (unType)

            {

                case "rar":

                    UnRar(fileFromUnZip, fileToUnZip);

                    break;

                case "zip":

                    UnZip(fileFromUnZip, fileToUnZip);

                    break;

            }

        }

        //解压rar格式的文件

        private static void UnRar(string fileFromUnZip, string fileToUnZip)

        {

            using (Process Process1 = new Process())// 开启一个进程 执行解压工作

            {

                string ServerDir = @"C:\Program Files (x86)\HaoZip\HaoZip.exe";//rar工具的安装路径   必须要安装 WinRAR     //例于:C:\Program Files (x86)\WinRAR\RAR.exe

                Process1.StartInfo.UseShellExecute = false;

                Process1.StartInfo.RedirectStandardInput = true;

                Process1.StartInfo.RedirectStandardOutput = true;

                Process1.StartInfo.RedirectStandardError = true;

                Process1.StartInfo.CreateNoWindow = true;

                Process1.StartInfo.FileName = ServerDir;

                Process1.StartInfo.Arguments = " x -inul -y " + fileFromUnZip + " " + fileToUnZip;

                Process1.Start();//解压开始  

                Process1.WaitForExit();

                Process1.Close();

            }

        }

        // 解压zip 文件

        public static void UnZip(string fileFromUnZip, string fileToUnZip)

        {

            ZipInputStream inputStream = new ZipInputStream(File.OpenRead(fileFromUnZip));

            ZipEntry theEntry;

            while ((theEntry = inputStream.GetNextEntry()) != null)

            {

                fileToUnZip += "/";

                string fileName = Path.GetFileName(theEntry.Name);

                string path = Path.GetDirectoryName(fileToUnZip) + "\\";

                // Directory.CreateDirectory(path);//生成解压目录

                if (fileName != String.Empty)

                {

                    FileStream streamWriter = File.Create(path + fileName);//解压文件到指定的目录 

                    int size = 2048;

                    byte[] data = new byte[2048];

                    while (true)

                    {

                        size = inputStream.Read(data, 0, data.Length);

                        if (size > 0)

                        {

                            streamWriter.Write(data, 0, size);

                        }

                        else

                        {

                            break;

                        }

                    }

                    streamWriter.Close();

                }

            }

            inputStream.Close();

        }

        #endregion



        private void Form1_Load(object sender, EventArgs e)

        {



        }



    }

    public class PDFPATH

    {

        public string path { get; set; }

    }

 

你可能感兴趣的:(遍历文件夹)