转载

初识IO流之小型资源管理器

初次接触到IO流,根据书本上的知识,加上自己的摸索,发现了一些好玩的事情.(书本上的知识或多或少,有时候不足以解决我们的问题!这时候我们就应该自己去求解!!!

所以我们学习的时候要抱有探索的精神,求知若渴是帮助我们获取更多知识的一种积极的精神态度,需要保持)

小型资源管理器

初识IO流之小型资源管理器

该项目主要是为了加载电脑磁盘中存在的所有文件夹和文件(directory,file)

这时候我遇到了第一个问题:书本上只有将指定的磁盘设为根节点,在窗体TreeView中添加该磁盘中的文件夹

(我去,那如果我的电脑上分了几十个磁盘分区,那我不得全指定了?我觉得微软肯定不会这么二,肯定有关于所有磁盘的类.

Disk是磁盘的意思,我就试了试,结果 = = 没有这个类,你妹的,我只好慢慢来)

然后就有了

初识IO流之小型资源管理器
 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         }
所有磁盘为根节点

结果华丽丽的爆了个这么个错误

初识IO流之小型资源管理器

(当时就有种去你妹的冲动,静下心来有发现了磁盘类型)

初识IO流之小型资源管理器
 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     }
磁盘类型

我就增加了一道判断解决了这个问题(学校的一个磁盘是虚拟光驱,产生了设备未就绪的问题)

初识IO流之小型资源管理器
 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             }
修改

接下来就是文件或文件夹的复制问题了.(右键菜单添加复制和删除)

文件夹是没办法跨磁盘移动的,如果要移动只能在同一驱动器下!

初识IO流之小型资源管理器
 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         }
文件或文件夹复制

使用递归操作.

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

正文到此结束
Loading...