初次接触到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 }
使用递归操作.
这个小项目到这里就告一段落了,要学习的东西还有很多,继续努力.
新闻热点
疑难解答