C#Winfrom获取指定目录下所有文件名称和文件名称相应的目录 并且添加到DataTable

时间:2021-04-23 12:49:58
        System.Data.DataTable dt = new System.Data.DataTable();
        DataColumn FileName;
        DataColumn FileDirectory;

        public FrmGetFileDirectory()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 获取文件目录及文件全称
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnGetFileDirectory_Click(object sender, EventArgs e)
        {
            ArrayList list = new ArrayList();
            ArrayList FileList = new ArrayList();
            System.Data.DataTable ddt=GetFileList(@"D:\TFSWork\Zoes\SRC-InProcess", "*.*", list, FileList, true);

            Export(ddt, @"D:\Work\工作信息\FileDicre.xlsx");

        }

        /// <summary>
        /// 首次加载事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FrmGetFileDirectory_Load(object sender, EventArgs e)
        {
            FileName = new DataColumn("FileName", typeof(string));
            FileDirectory = new DataColumn("FileDirectory", typeof(string));
            dt.Columns.Add(FileName);
            dt.Columns.Add(FileDirectory);
        }




        /// <summary>
        /// 
        /// </summary>
        /// <param name="strDir">指定路径</param>
        /// <param name="strFilePattern">要与strDir 中的文件名匹配的搜索字符串</param>
        /// <param name="arrDirs">查询得到的所有目录ArrayList</param>
        /// <param name="arrFiles">查询得到的所有文件名称ArrayList</param>
        /// <param name="bIsRecursive">是否递归查询</param>
        private System.Data.DataTable GetFileList(string strDir, string strFilePattern, ArrayList arrDirs, ArrayList arrFiles, bool bIsRecursive)
        {
            if (string.IsNullOrEmpty(strDir))
            {  // 参数正确性检查
                return dt;
            }
            DataRow dr = dt.NewRow();

            try
            {
                // 取得指定路径下所有符合条件的文件
                string[] strFiles = Directory.GetFiles(strDir, strFilePattern);
                // 取得指定路径下所有目录

                string[] strDirs = Directory.GetDirectories(strDir);

                foreach (string name in strFiles)
                {  // 将所有文件名称加入结果ArrayList中
                    //arrFiles.Add(name);
                    string strFileName = GetFileName(name);
                    dr[FileName] = strFileName;//添加到文件名称:列
                    dr[FileDirectory]=GetDirectory(name);
                }

                foreach (string name in strDirs)
                {  // 将所有目录加入结果ArrayList中
                    arrDirs.Add(name);
                    //dr[FileDirectory] = name;//添加到文件全目录:列
                }

                if (strFiles.Length > 0)
                    dt.Rows.Add(dr);//添加到行

                if (bIsRecursive)
                {  // 递归
                    if (strDirs.Length > 0)
                    {
                        foreach (string dir in strDirs)
                        {  // 递归遍历所有文件夹
                            GetFileList(dir, strFilePattern, arrDirs, arrFiles, bIsRecursive);
                        }
                    }
                }
            }
            catch(Exception e)
            {
                MessageBox.Show("报错" + e.Message);
            }
            return dt;
        }
        /// <summary>
        /// 获取文件名称
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public static string GetFileName(String path)
        {
            if (path.Contains("\\"))
            {
                string[] arr = path.Split('\\');
                return arr[arr.Length - 1];
            }
            else
            {
                string[] arr = path.Split('/');
                return arr[arr.Length - 1];
            }
        }

        /// <summary>
        /// 获取文件目录
        /// </summary>
        /// <param name="filename"></param>
        /// <returns></returns>
        public static String GetDirectory(string filename)
        {
            return filename.Substring(0, filename.LastIndexOf("\\"));
        }