初次接触到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流之小型资源管理器的更多相关文章

  1. IO流的应用————小型资源管理器

    小型资源管理器 private void LoadTreeView() { DirectoryInfo dir = new DirectoryInfo(@"E:\"); Direc ...

  2. C# 小型资源管理器

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. 实现1.双击自动关联文件类型打开 2.PC所有驱动器 3.小型资源管理器

    感谢各位这里实现:双击自动关联文件类型打开 2.PC所有驱动器 3.小型资源管理器!! 首先主页面: 2.运用DriveInfo驱动器的信息:获得整个系统磁盘驱动!!,运用frorach循环遍历到Tr ...

  4. 小型资源管理器,IO操作,读取和写入文件和目录的常用操作

    解决方案: 小总结: 用IO流,的file,DirectoryInfo的方法绑定Treeview控件上和删除,读取, 可以熟练掌握一下IO流 主页面: private void Form1_Load( ...

  5. Java学习 · 初识 IO流

    IO流   1. 原理与概念 a)     流 i.           流动,流向 ii.           从一端移动到另一端 源头到目的地 iii.           抽象.动态概念,是一连 ...

  6. 初识io流条件状态

    一  流状态    C++中的输入输出系统负责记录每一个输入输出操作的结果信息,这些当前的状态信息被包含在io_state类型的对象中.io_state是一个枚举类型(就像open_mode一样),以 ...

  7. 初识IO流

    输入输出流,用来进行设备之间的数据传输. 是我们IO传输的数据是以文件的形式体现的,所以Java给我们提供了一个类,Flie用来描文件和目录 File(File parent, String chil ...

  8. 小型资源管理器之动态添加TreeView节点

    FrmMain主界面 using System; using System.Collections.Generic; using System.ComponentModel; using System ...

  9. Java IO流以及装饰器模式在其上的运用

    流概述 Java中,流是一种有序的字节序列,可以有任意的长度.从应用流向目的地称为输出流,从目的地流向应用称为输入流. Java的流族谱 Java的 java.io 包中囊括了整个流的家族,输出流和输 ...

随机推荐

  1. spring占位符解析器---PropertyPlaceholderHelper

    一.PropertyPlaceholderHelper 职责 扮演者占位符解析器的角色,专门用来负责解析路劲中or名字中的占位符的字符,并替换上具体的值 二.例子 public class Prope ...

  2. Android系统Google Maps开发实例浅析

    Google Map(谷歌地图)是Google公司提供的电子地图服务.包括了三种视图:矢量地图.卫星图片.地形地图.对于Android系统来说,可以利用Google提供的地图服务来开发自己的一些应用. ...

  3. iOS开发——屏幕适配篇&autoResizing autoLayout和sizeClass

    autoResizing autoLayout和sizeClass,VFL,Masonry详解 1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前 ...

  4. View绘制详解(二),从setContentView谈起

    掐指一算,本来今天该介绍View的测量了,可是要说View的测量,那就要从setContentView谈起了,setContentView本身涉及到的东西也是挺多的,所以今天我们就先来看看这个setC ...

  5. 远程通信Socket

    网络通信高性能的三个主题: 1) 传输:用什么样的通道将数据发送给对方,BIO.NIO或者AIO,IO模型在很大程度上决定了框架的性能: 2) 协议:采用什么样的通信协议,HTTP或者内部私有协议.协 ...

  6. [转]Spring数据库读写分离

    数据库的读写分离简单的说是把对数据库的读和写操作分开对应不同的数据库服务器,这样能有效地减轻数据库压力,也能减轻io压力. 主(master)数据库提供写操作,从(slave)数据库提供读操作,其实在 ...

  7. Controller和RequestMapping

    一.Controller返回值,String或者ModelAndView       首先看一下spring的配置文件,如下: 第一种,返回类型为String,Controller中的方法如下: 根据 ...

  8. jmap命令

    一.jmap -heap PID using parallel threads in the new generation.  ##新生代采用的是并行线程处理方式 using thread-local ...

  9. systemverilog interface

    普通的模块使用法:注意我们这里只实现了部分功能....不是完全的读写模块....     module mem_core(   input logic wen,  input logic ren,   ...

  10. Swift枚举|结构体|类|属性|方法|下标脚本|继承

    1. 枚举: ->在Swift中依然适用整数来标示枚举值,需搭配case关键字 enum  Celebrity{  case DongXie,XiDu,Nandi,BeiGai }  // 从左 ...