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

2018-06-22 06:49:20来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

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

使用递归操作.

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

 

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:.NET中常见的内存泄漏和解决办法

下一篇:.NET微信公众号开发-5.0微信支付