初次接觸到IO流,根據書本上的知識,加上自己的摸索,發現了一些好玩的事情.(書本上的知識或多或少,有時候不足以解決我們的問題!這時候我們就應該自己去求解!!!
所以我們學習的時候要抱有探索的精神,求知若渴是幫助我們獲取更多知識的一種積極的精神態度,需要保持)
該項目主要是為了加載電腦磁盤中存在的所有文件夾和文件(directory,file)
這時候我遇到了第一個問題:書本上只有將指定的磁盤設為根節點,在窗體TreeView中添加該磁盤中的文件夾
(我去,那如果我的電腦上分了幾十個磁盤分區,那我不得全指定了?我覺得微軟肯定不會這么二,肯定有關于所有磁盤的類.
Disk是磁盤的意思,我就試了試,結果 = = 沒有這個類,你妹的,我只好慢慢來)
然后就有了
1 PRivate void GetDirectoryInDisk() 2 { 3 DriveInfo[] allDisk = System.IO.DriveInfo.GetDrives(); 4 foreach (DriveInfo item in allDisk) 5 { 6 7 TreeNode treeNode = new TreeNode(); 8 treeNode.Text = item.Name; 9 treeNode.Tag = item;10 tvAllDirectoryInfo.Nodes.Add(treeNode);11 DirectoryInfo directory = item.RootDirectory;12 //獲取驅動器下所有的文件夾信息13 DirectoryInfo[] allDirectory = directory.GetDirectories();14 foreach (DirectoryInfo dir in allDirectory)15 {16 TreeNode subTreeNode = new TreeNode();17 subTreeNode.Text = dir.Name;18 subTreeNode.Tag = dir;19 treeNode.Nodes.Add(subTreeNode);20 }21 22 }23 }
結果華麗麗的爆了個這么個錯誤
(當時就有種去你妹的沖動,靜下心來有發現了磁盤類型)
1 // 摘要: 2 // 定義驅動器類型常數,包括 CDRom、Fixed、Network、NoRootDirectory、Ram、Removable 和 Unknown。 3 [Serializable] 4 [ComVisible(true)] 5 public enum DriveType 6 { 7 // 摘要: 8 // 驅動器類型未知。 9 Unknown = 0,10 //11 // 摘要:12 // 此驅動器沒有根目錄。13 NoRootDirectory = 1,14 //15 // 摘要:16 // 此驅動器是一個可移動存儲設備,如軟盤驅動器或 USB 閃存驅動器。17 Removable = 2,18 //19 // 摘要:20 // 此驅動器是一個固定磁盤。21 Fixed = 3,22 //23 // 摘要:24 // 此驅動器是一個網絡驅動器。25 Network = 4,26 //27 // 摘要:28 // 此驅動器是一個光盤設備,如 CD 或 DVD-ROM。29 CDRom = 5,30 //31 // 摘要:32 // 此驅動器是一個 RAM 磁盤。33 Ram = 6,34 }
我就增加了一道判斷解決了這個問題(學校的一個磁盤是虛擬光驅,產生了設備未就緒的問題)
1 foreach (DriveInfo item in allDisk) 2 { 3 if (item.DriveType == DriveType.Fixed) 4 { 5 TreeNode treeNode = new TreeNode(); 6 treeNode.Text = item.Name; 7 treeNode.Tag = item; 8 tvAllDirectoryInfo.Nodes.Add(treeNode); 9 DirectoryInfo directory = item.RootDirectory;10 //獲取驅動器下所有的文件夾信息11 DirectoryInfo[] allDirectory = directory.GetDirectories();12 foreach (DirectoryInfo dir in allDirectory)13 {14 TreeNode subTreeNode = new TreeNode();15 subTreeNode.Text = dir.Name;16 subTreeNode.Tag = dir;17 treeNode.Nodes.Add(subTreeNode);18 }19 }20 }
文件夾是沒辦法跨磁盤移動的,如果要移動只能在同一驅動器下!
1 private void CopyDirectory(string srcdir, string desdir) 2 { 3 string folderName = srcdir.Substring(srcdir.LastIndexOf("//") + 1); 4 5 string desfolderdir = desdir + "//" + folderName; 6 7 if (desdir.LastIndexOf("//") == (desdir.Length - 1)) 8 { 9 desfolderdir = desdir + folderName;10 }11 string[] filenames = Directory.GetFileSystemEntries(srcdir);12 13 foreach (string file in filenames)// 遍歷所有的文件和目錄14 {15 if (Directory.Exists(file))// 先當作目錄處理如果存在這個目錄就遞歸Copy該目錄下面的文件16 {17 18 string currentdir = desfolderdir + "//" + file.Substring(file.LastIndexOf("//") + 1);19 if (!Directory.Exists(currentdir))20 {21 Directory.CreateDirectory(currentdir);22 }23 24 CopyDirectory(file, desfolderdir);25 }26 27 else // 否則直接copy文件28 {29 string srcfileName = file.Substring(file.LastIndexOf("//") + 1);30 31 srcfileName = desfolderdir + "//" + srcfileName;32 33 34 if (!Directory.Exists(desfolderdir))35 {36 Directory.CreateDirectory(desfolderdir);37 }38 39 40 File.Copy(file, srcfileName);41 }42 }//foreach 43 }
使用遞歸操作.
這個小項目到這里就告一段落了,要學習的東西還有很多,繼續努力.
新聞熱點
疑難解答