1. 程式人生 > >檔案基本操作之獲取資料夾下的所有子資料夾及其名稱

檔案基本操作之獲取資料夾下的所有子資料夾及其名稱

獲取資料夾下的所有子資料夾及其名稱:


用到的主要控制元件:TextBox,FolderBrowserDialog,Button,TreeView等。

相關程式碼:

        private string temStr;
        Thread thdAddFile;
        private void btn_Click(object sender, EventArgs e)
        {
            //開啟資料夾對話方塊
            if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {
                //顯示選擇的資料夾路徑
                textBoxFile.Text = folderBrowserDialog1.SelectedPath;
                //儲存選擇的資料夾路徑
                temStr = folderBrowserDialog1.SelectedPath;
                //建立一個執行緒
                thdAddFile = new Thread(new ThreadStart(SetAddFile));
                //執行當前執行緒
                thdAddFile.Start();

            }
        }

        //定義委託執行緒
        public delegate void AddFile();
        /// <summary>
        /// 對指定的執行緒進行託管
        /// </summary>
        public void SetAddFile()
        {
            this.Invoke(new AddFile(RunAddFile));
        }

        public void RunAddFile()
        {
            //建立一個執行緒
            TreeNode TNode = new TreeNode();
            File_Copy(treeView1,temStr,TNode,0);
            //執行主執行緒
            Thread.Sleep(0);
            //執行執行緒
            thdAddFile.Abort();
        }

        private void File_Copy(TreeView TV,string Sdir,TreeNode TNode,int n)
        {
            DirectoryInfo dir = new DirectoryInfo(Sdir);
            try {
                //判斷所指的資料夾/檔案是否存在
                if (!dir.Exists)
                    return;
                DirectoryInfo dirD = dir as DirectoryInfo;
                //如果給定引數不是資料夾則退出 判斷資料夾是否為空
                if (dirD == null)
                    return;
                else
                {
                    if (n == 0)
                    {
                        //新增資料夾的名稱
                        TNode = TV.Nodes.Add(dirD.Name);
                        TNode.Tag = 1;
                    }
                    else
                    {
                        //在資料夾中新增各子資料夾的名稱
                        TNode = TNode.Nodes.Add(dirD.Name);
                        TNode.Tag = 1;
                    }
                }
                //獲取資料夾所有檔案和資料夾
                FileSystemInfo[] files = dirD.GetFileSystemInfos();
                //對單個FileSystemInfo進行判斷,如果是資料夾則進行遞迴操作
                foreach (FileSystemInfo FSys in files)
                {
                    FileInfo fileInfo = FSys as FileInfo;
                    //如果是檔案,進行檔案的複製操作
                    if (fileInfo != null)
                    {
                        //獲取檔案所在原始路徑
                        FileInfo SFInfo = new FileInfo(fileInfo.DirectoryName + "\\" + fileInfo.Name);
                        TNode.Nodes.Add(fileInfo.Name);
                        TNode.Tag = 1;
                    }
                    else {
                        string pp = FSys.Name;
                        //如果是資料夾,則進行遞迴呼叫
                        File_Copy(TV,Sdir+"\\"+FSys.ToString(),TNode,1);
                    }
                }


            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }

        }