初次接触到IO流,根据书本上的知识,加上自己的摸索,发现了一些好玩的事情.(书本上的知识或多或少,有时候不足以解决我们的问题!这时候我们就应该自己去求解!!!
所以我们学习的时候要抱有探索的精神,求知若渴是帮助我们获取更多知识的一种积极的精神态度,需要保持)
小型资源管理器
该项目主要是为了加载电脑磁盘中存在的所有文件夹和文件(directory,file)
这时候我遇到了第一个问题:书本上只有将指定的磁盘设为根节点,在窗体TreeView中添加该磁盘中的文件夹
(我去,那如果我的电脑上分了几十个磁盘分区,那我不得全指定了?我觉得微软肯定不会这么二,肯定有关于所有磁盘的类.
Disk是磁盘的意思,我就试了试,结果 = = 没有这个类,你妹的,我只好慢慢来)
然后就有了
1PRivatevoidGetDirectoryInDisk()2{3DriveInfo[] allDisk =System.IO.DriveInfo.GetDrives();4foreach(DriveInfo iteminallDisk)5{67TreeNode treeNode =newTreeNode();8treeNode.Text =item.Name;9treeNode.Tag =item;10tvAllDirectoryInfo.Nodes.Add(treeNode);11DirectoryInfo directory =item.RootDirectory;12//获取驱动器下所有的文件夹信息13DirectoryInfo[] allDirectory =directory.GetDirectories();14foreach(DirectoryInfo dirinallDirectory)15{16TreeNode subTreeNode =newTreeNode();17subTreeNode.Text =dir.Name;18subTreeNode.Tag =dir;19treeNode.Nodes.Add(subTreeNode);20}2122}23}
所有磁盘为根节点
结果华丽丽的爆了个这么个错误
(当时就有种去你妹的冲动,静下心来有发现了磁盘类型)
1//摘要:2//定义驱动器类型常数,包括 CDRom、Fixed、Network、NoRootDirectory、Ram、Removable 和 Unknown。3[Serializable]4[ComVisible(true)]5publicenumDriveType6{7//摘要:8//驱动器类型未知。9Unknown =0,10//11//摘要:12//此驱动器没有根目录。13NoRootDirectory =1,14//15//摘要:16//此驱动器是一个可移动存储设备,如软盘驱动器或 USB 闪存驱动器。17Removable =2,18//19//摘要:20//此驱动器是一个固定磁盘。21Fixed =3,22//23//摘要:24//此驱动器是一个网络驱动器。25Network =4,26//27//摘要:28//此驱动器是一个光盘设备,如 CD 或 DVD-ROM。29CDRom =5,30//31//摘要:32//此驱动器是一个 RAM 磁盘。33Ram =6,34}
磁盘类型
我就增加了一道判断解决了这个问题(学校的一个磁盘是虚拟光驱,产生了设备未就绪的问题)
1foreach(DriveInfo iteminallDisk)2{3if(item.DriveType ==DriveType.Fixed)4{5TreeNode treeNode =newTreeNode();6treeNode.Text =item.Name;7treeNode.Tag =item;8tvAllDirectoryInfo.Nodes.Add(treeNode);9DirectoryInfo directory =item.RootDirectory;10//获取驱动器下所有的文件夹信息11DirectoryInfo[] allDirectory =directory.GetDirectories();12foreach(DirectoryInfo dirinallDirectory)13{14TreeNode subTreeNode =newTreeNode();15subTreeNode.Text =dir.Name;16subTreeNode.Tag =dir;17treeNode.Nodes.Add(subTreeNode);18}19}20}
修改
接下来就是文件或文件夹的复制问题了.(右键菜单添加复制和删除)文件夹是没办法跨磁盘移动的,如果要移动只能在同一驱动器下!
1privatevoidCopyDirectory(stringsrcdir,stringdesdir)2{3stringfolderName = srcdir.Substring(srcdir.LastIndexOf("\\") +1);45stringdesfolderdir = desdir +"\\"+folderName;67if(desdir.LastIndexOf("\\") == (desdir.Length -1))8{9desfolderdir = desdir +folderName;10}11string[] filenames =Directory.GetFileSystemEntries(srcdir);1213foreach(stringfileinfilenames)//遍历所有的文件和目录14{15if(Directory.Exists(file))//先当作目录处理如果存在这个目录就递归Copy该目录下面的文件16{1718stringcurrentdir = desfolderdir +"\\"+ file.Substring(file.LastIndexOf("\\") +1);19if(!Directory.Exists(currentdir))20{21Directory.CreateDirectory(currentdir);22}2324CopyDirectory(file, desfolderdir);25}2627else//否则直接copy文件28{29stringsrcfileName = file.Substring(file.LastIndexOf("\\") +1);3031srcfileName = desfolderdir +"\\"+srcfileName;323334if(!Directory.Exists(desfolderdir))35{36Directory.CreateDirectory(desfolderdir);37}383940File.Copy(file, srcfileName);41}42}//foreach43}
文件或文件夹复制
使用递归操作.
这个小项目到这里就告一段落了,要学习的东西还有很多,继续努力.