初次接触到IO流,根据书本上的知识,加上自己的摸索,发现了一些好玩的事情.(书本上的知识或多或少,有时候不足以解决我们的问题!这时候我们就应该自己去求解!!!

所以我们学习的时候要抱有探索的精神,求知若渴是帮助我们获取更多知识的一种积极的精神态度,需要保持)

小型资源管理器

初识IO流之小型资源管理器-LMLPHP

该项目主要是为了加载电脑磁盘中存在的所有文件夹和文件(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);
} }
}

所有磁盘为根节点

结果华丽丽的爆了个这么个错误

初识IO流之小型资源管理器-LMLPHP

(当时就有种去你妹的冲动,静下心来有发现了磁盘类型)

     // 摘要:
// 定义驱动器类型常数,包括 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
}

文件或文件夹复制

使用递归操作.

这个小项目到这里就告一段落了,要学习的东西还有很多,继续努力.

05-02 07:04