初识IO流之小型资源管理器
初次接触到IO流,根据书本上的知识,加上自己的摸索,发现了一些好玩的事情.(书本上的知识或多或少,有时候不足以解决我们的问题!这时候我们就应该自己去求解!!!
所以我们学习的时候要抱有探索的精神,求知若渴是帮助我们获取更多知识的一种积极的精神态度,需要保持)
小型资源管理器

该项目主要是为了加载电脑磁盘中存在的所有文件夹和文件(directory,file)
这时候我遇到了第一个问题:书本上只有将指定的磁盘设为根节点,在窗体TreeView中添加该磁盘中的文件夹
(我去,那如果我的电脑上分了几十个磁盘分区,那我不得全指定了?我觉得微软肯定不会这么二,肯定有关于所有磁盘的类.
Disk是磁盘的意思,我就试了试,结果 = = 没有这个类,你妹的,我只好慢慢来)
然后就有了
private void GetDirectoryInDisk()
{
DriveInfo[] allDisk = System.IO.DriveInfo.GetDrives();
foreach (DriveInfo item in allDisk)
{ TreeNode treeNode = new TreeNode();
treeNode.Text = item.Name;
treeNode.Tag = item;
tvAllDirectoryInfo.Nodes.Add(treeNode);
DirectoryInfo directory = item.RootDirectory;
//获取驱动器下所有的文件夹信息
DirectoryInfo[] allDirectory = directory.GetDirectories();
foreach (DirectoryInfo dir in allDirectory)
{
TreeNode subTreeNode = new TreeNode();
subTreeNode.Text = dir.Name;
subTreeNode.Tag = dir;
treeNode.Nodes.Add(subTreeNode);
} }
}
所有磁盘为根节点
结果华丽丽的爆了个这么个错误

(当时就有种去你妹的冲动,静下心来有发现了磁盘类型)
// 摘要:
// 定义驱动器类型常数,包括 CDRom、Fixed、Network、NoRootDirectory、Ram、Removable 和 Unknown。
[Serializable]
[ComVisible(true)]
public enum DriveType
{
// 摘要:
// 驱动器类型未知。
Unknown = ,
//
// 摘要:
// 此驱动器没有根目录。
NoRootDirectory = ,
//
// 摘要:
// 此驱动器是一个可移动存储设备,如软盘驱动器或 USB 闪存驱动器。
Removable = ,
//
// 摘要:
// 此驱动器是一个固定磁盘。
Fixed = ,
//
// 摘要:
// 此驱动器是一个网络驱动器。
Network = ,
//
// 摘要:
// 此驱动器是一个光盘设备,如 CD 或 DVD-ROM。
CDRom = ,
//
// 摘要:
// 此驱动器是一个 RAM 磁盘。
Ram = ,
}
磁盘类型
我就增加了一道判断解决了这个问题(学校的一个磁盘是虚拟光驱,产生了设备未就绪的问题)
foreach (DriveInfo item in allDisk)
{
if (item.DriveType == DriveType.Fixed)
{
TreeNode treeNode = new TreeNode();
treeNode.Text = item.Name;
treeNode.Tag = item;
tvAllDirectoryInfo.Nodes.Add(treeNode);
DirectoryInfo directory = item.RootDirectory;
//获取驱动器下所有的文件夹信息
DirectoryInfo[] allDirectory = directory.GetDirectories();
foreach (DirectoryInfo dir in allDirectory)
{
TreeNode subTreeNode = new TreeNode();
subTreeNode.Text = dir.Name;
subTreeNode.Tag = dir;
treeNode.Nodes.Add(subTreeNode);
}
}
}
修改
接下来就是文件或文件夹的复制问题了.(右键菜单添加复制和删除)
文件夹是没办法跨磁盘移动的,如果要移动只能在同一驱动器下!
private void CopyDirectory(string srcdir, string desdir)
{
string folderName = srcdir.Substring(srcdir.LastIndexOf("\\") + ); string desfolderdir = desdir + "\\" + folderName; if (desdir.LastIndexOf("\\") == (desdir.Length - ))
{
desfolderdir = desdir + folderName;
}
string[] filenames = Directory.GetFileSystemEntries(srcdir); foreach (string file in filenames)// 遍历所有的文件和目录
{
if (Directory.Exists(file))// 先当作目录处理如果存在这个目录就递归Copy该目录下面的文件
{ string currentdir = desfolderdir + "\\" + file.Substring(file.LastIndexOf("\\") + );
if (!Directory.Exists(currentdir))
{
Directory.CreateDirectory(currentdir);
} CopyDirectory(file, desfolderdir);
} else // 否则直接copy文件
{
string srcfileName = file.Substring(file.LastIndexOf("\\") + ); srcfileName = desfolderdir + "\\" + srcfileName; if (!Directory.Exists(desfolderdir))
{
Directory.CreateDirectory(desfolderdir);
} File.Copy(file, srcfileName);
}
}//foreach
}
文件或文件夹复制
使用递归操作.
这个小项目到这里就告一段落了,要学习的东西还有很多,继续努力.
初识IO流之小型资源管理器的更多相关文章
- IO流的应用————小型资源管理器
小型资源管理器 private void LoadTreeView() { DirectoryInfo dir = new DirectoryInfo(@"E:\"); Direc ...
- C# 小型资源管理器
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 实现1.双击自动关联文件类型打开 2.PC所有驱动器 3.小型资源管理器
感谢各位这里实现:双击自动关联文件类型打开 2.PC所有驱动器 3.小型资源管理器!! 首先主页面: 2.运用DriveInfo驱动器的信息:获得整个系统磁盘驱动!!,运用frorach循环遍历到Tr ...
- 小型资源管理器,IO操作,读取和写入文件和目录的常用操作
解决方案: 小总结: 用IO流,的file,DirectoryInfo的方法绑定Treeview控件上和删除,读取, 可以熟练掌握一下IO流 主页面: private void Form1_Load( ...
- Java学习 · 初识 IO流
IO流 1. 原理与概念 a) 流 i. 流动,流向 ii. 从一端移动到另一端 源头到目的地 iii. 抽象.动态概念,是一连 ...
- 初识io流条件状态
一 流状态 C++中的输入输出系统负责记录每一个输入输出操作的结果信息,这些当前的状态信息被包含在io_state类型的对象中.io_state是一个枚举类型(就像open_mode一样),以 ...
- 初识IO流
输入输出流,用来进行设备之间的数据传输. 是我们IO传输的数据是以文件的形式体现的,所以Java给我们提供了一个类,Flie用来描文件和目录 File(File parent, String chil ...
- 小型资源管理器之动态添加TreeView节点
FrmMain主界面 using System; using System.Collections.Generic; using System.ComponentModel; using System ...
- Java IO流以及装饰器模式在其上的运用
流概述 Java中,流是一种有序的字节序列,可以有任意的长度.从应用流向目的地称为输出流,从目的地流向应用称为输入流. Java的流族谱 Java的 java.io 包中囊括了整个流的家族,输出流和输 ...
随机推荐
- Ant-常用命令(笔记二)
1.copy命令: <?xml version="1.0" encoding="utf-8"?> <project name="co ...
- XMPP——Smack[5]文件传输及离线消息的获取
三天时间,赶在最后一下午实现了文件的传输,本来需要实现离线文件的发送的,一直没想好怎么弄,找openfire的离线文件插件没找到,后来想出一种方法,起服务器时起了一个系统用户,一直在线,当用户发送离线 ...
- 看文章《EAI和SOA的比较》有感(1)
<EAI和SOA的比较>http://www.cnblogs.com/asdling/archive/2007/11/26/973100.html这篇文章写的很全面,至少自己这么认为,也解 ...
- IOS 图片阴影,圆角等处理
一直以来,为IOS添加图片的特殊效果都是通过跟美工的配合,比如,要加阴影,就从美工那边获得一张阴影效果图,在界面上画两个UIImageView,将阴影放在下面,图像放上上面,错开一定角度.有比如想做圆 ...
- 正则化方法 exec 和match以及test
var patt=new RegExp(/\d+/g); var str="dfgdfg5465yhhgh65y65hh41"; var result; // var reset= ...
- Linux lsof命令使用小结
lsof(list open files)是一个列出当前系统打开文件的工具.在Linux环境下,任何事物都是以文件的形式存在,通过文件不仅可以访问常规数据,还可以访问网络连接和硬件.所以,如传 ...
- C语言register关键字—最快的关键字
register:这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率.注意是尽可能,不是绝对.你想想,一个CPU 的寄存器也就那么几个或几十个,你要是 ...
- java_spring_依赖注入(构造器)
依赖注入对象可以 手工装配(建议) 和 自动装配 package com.PersonDaoBean.test; public interface PersonDao { public abstrac ...
- 【转】Singleton单例模式
对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务:一个系统只能有一个窗口管理器或文件系统:一个系统只能有一个计时工具或ID(序号)生成器. ...
- 使用HttpClient发送请求、接收响应
使用HttpClient发送请求.接收响应很简单,只要如下几步即可. 1.创建HttpClient对象. CloseableHttpClient httpclient = HttpClients.c ...