初识IO流之小型资源管理器
2018-06-18 02:40:57来源:未知 阅读 ()
初次接触到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
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:重学《C#高级编程》(序)
- vtk学习记录(三)——初识vtkRenderer 2020-05-16
- C++ 深入浅出工厂模式(初识篇) 2019-09-17
- 网络流之最大流EK --- poj 1459 2019-05-22
- 网络流之最大流Dinic --- poj 1459 2019-05-13
- 【共读Primer】2. <1.2>初识输入输出 Page5 2018-08-02
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash