初识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 包中囊括了整个流的家族,输出流和输 ...
随机推荐
- cas 3.5.2 登录成功后,如何返回用户更多信息?
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- cocos2d-x ClippingNode
转自:http://blog.csdn.net/bill_man/article/details/8498424 可以根据一个模板切割图片的节点--CCClippingNode.这个类提供了一种不规则 ...
- 友盟分享 -QQAPI- QQApi.m:250 param error: url is nil
有一个项目 需要用到友盟分享,点击分享内容,需要跳转到指定的url,不带参数的url非常好跳,也没什么问题,但是 带了参数之后:比如http://121.43.121.8:8080/tj/photo/ ...
- IPAD之分割视图 SplitViewController
转载自:http://www.w3cschool.cc/ios/att-ios-ui-splitview-htm.html 1 分割视图的使用 分割视图是 iPad 的特定视图控制器用于管理两个视图控 ...
- Codeforces Codeforces Round #319 (Div. 2) B. Modulo Sum 背包dp
B. Modulo Sum Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/577/problem/ ...
- Java连接redis的使用演示样例
Java连接redis的使用演示样例 Redis是开源的key-value存储工具,redis通经常使用来存储结构化的数据,由于redis的key能够包括String.hash.listset和sor ...
- Print2flash在.NET(C#)64位中的使用,即文档在线预览
转:http://www.cnblogs.com/flowwind/p/3411106.html Print2flash在.NET(C#)中的使用,即文档在线预览 office文档(word,ex ...
- android学习日记19--四大组件之BroadcastReciver(广播接收者)
二.BroadcastReciver(广播接收者) 1.简述 BroadcastReciver位于android.content包下,主要用于对广播消息(Intent)的过滤并响应的控件.可以理解为全 ...
- android133 360 06 一键锁频,清楚数据
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools= ...
- How to install VXDIAG Honda, Toyota and JLR SDD software
EOBD2 has newly launched Allscanner VXDIAG multi diagnostic tool with OEM diagnostic software: Honda ...