初识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 包中囊括了整个流的家族,输出流和输 ...
随机推荐
- Atom远程连接服务器报错服务器版本和客户端版本不一致
Atom远程连接服务器 报错信息: Server version is different than client version Original error message: Version mi ...
- PS Studio调用.exe输出错误信息的解决办法
在一个button_click下调用了如下外部可执行文件: $button1_Click = { #TODO: Place custom script here .\PsExec.exe \\192. ...
- Android中定时器的3种实现方法
原文:http://blog.csdn.net/wulianghuan/article/details/8507221 在Android开发中,定时器一般有以下3种实现方法: 一.采用Handler与 ...
- Apache 目录权限
目录访问权限 输入用户名.密码后方可访问home目录下的文件: httpd.conf <Directory "D:/software/wwwroot/home"> Op ...
- Oracle DB 执行表空间时间点恢复
• 列出在执行表空间时间点恢复(TSPITR) 时会发生的操作 • 阐释TSPITR 使用的术语的定义 • 确定适合将TSPITR 用作解决方案的情况 • 确定时间点恢复的正确目标时间 • 确定不能使 ...
- 06---Java基础、面向对象
一.Java基础 1.Java概述 Java语言特点: 简单性.解释性.面向对象.高性能.分布式处理 多线程.健壮性.动 ...
- 信号之kill和raise函数
kill函数将信号发送给进程或进程组.raise函数则允许进程向自身发送信号. #include <signal.h> int kill(pid_t pid, int signo); in ...
- 应聘.net开发工程师常见的面试题(一)(转载)
1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成 ...
- java_利用session校验图片认证码
RegisterServlet:检验server,client验证码是否一致 ImageServlet: 产生验证码 <!DOCTYPE html> <html> <he ...
- Objective-C Runtime之着魔的UIAlertView
前言: 上篇文章写的是Runtime的一个入门教程,刚哥问我那个Associated Objects加回调是啥时候用,那我就来告诉你啦!我们在使用UIAlertView的时候用的多. 传统的UIAle ...