檔案基本操作之獲取資料夾下的所有子資料夾及其名稱
阿新 • • 發佈:2019-02-13
獲取資料夾下的所有子資料夾及其名稱:
用到的主要控制元件: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; } }