你的位置:首页 > ASP.net教程

[ASP.net教程]初识IO流之小型资源管理器


初次接触到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     }

文件或文件夹复制

使用递归操作.

这个小项目到这里就告一段落了,要学习的东西还有很多,继续努力.