首页 > 学院 > 开发设计 > 正文

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

2019-11-14 15:55:25
字体:
来源:转载
供稿:网友

初次接触到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         }
文件或文件夹复制

使用递归操作.

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

 

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表