
·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> 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 }
文件或文件夹复制
使用递归操作.
这个小项目到这里就告一段落了,要学习的东西还有很多,继续努力.