zoukankan      html  css  js  c++  java
  • 初识IO流之小型资源管理器

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

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

    小型资源管理器

    该项目主要是为了加载电脑磁盘中存在的所有文件夹和文件(directory,file)

    这时候我遇到了第一个问题:书本上只有将指定的磁盘设为根节点,在窗体TreeView中添加该磁盘中的文件夹

    (我去,那如果我的电脑上分了几十个磁盘分区,那我不得全指定了?我觉得微软肯定不会这么二,肯定有关于所有磁盘的类.

    Disk是磁盘的意思,我就试了试,结果 = = 没有这个类,你妹的,我只好慢慢来)

    然后就有了

     1         private void GetDirectoryInDisk()
     2         {
     3             DriveInfo[] allDisk = System.IO.DriveInfo.GetDrives();
     4             foreach (DriveInfo item in allDisk)
     5             {
     6                 
     7                     TreeNode treeNode = new TreeNode();
     8                     treeNode.Text = item.Name;
     9                     treeNode.Tag = item;
    10                     tvAllDirectoryInfo.Nodes.Add(treeNode);
    11                     DirectoryInfo directory = item.RootDirectory;
    12                     //获取驱动器下所有的文件夹信息
    13                     DirectoryInfo[] allDirectory = directory.GetDirectories();
    14                     foreach (DirectoryInfo dir in allDirectory)
    15                     {
    16                         TreeNode subTreeNode = new TreeNode();
    17                         subTreeNode.Text = dir.Name;
    18                         subTreeNode.Tag = dir;
    19                         treeNode.Nodes.Add(subTreeNode);
    20                     }
    21                 
    22             }
    23         }
    所有磁盘为根节点

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

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

     1     // 摘要:
     2     //     定义驱动器类型常数,包括 CDRom、Fixed、Network、NoRootDirectory、Ram、Removable 和 Unknown。
     3     [Serializable]
     4     [ComVisible(true)]
     5     public enum DriveType
     6     {
     7         // 摘要:
     8         //     驱动器类型未知。
     9         Unknown = 0,
    10         //
    11         // 摘要:
    12         //     此驱动器没有根目录。
    13         NoRootDirectory = 1,
    14         //
    15         // 摘要:
    16         //     此驱动器是一个可移动存储设备,如软盘驱动器或 USB 闪存驱动器。
    17         Removable = 2,
    18         //
    19         // 摘要:
    20         //     此驱动器是一个固定磁盘。
    21         Fixed = 3,
    22         //
    23         // 摘要:
    24         //     此驱动器是一个网络驱动器。
    25         Network = 4,
    26         //
    27         // 摘要:
    28         //     此驱动器是一个光盘设备,如 CD 或 DVD-ROM。
    29         CDRom = 5,
    30         //
    31         // 摘要:
    32         //     此驱动器是一个 RAM 磁盘。
    33         Ram = 6,
    34     }
    磁盘类型

    我就增加了一道判断解决了这个问题(学校的一个磁盘是虚拟光驱,产生了设备未就绪的问题)

     1             foreach (DriveInfo item in allDisk)
     2             {
     3                 if (item.DriveType == DriveType.Fixed)
     4                 {
     5                     TreeNode treeNode = new TreeNode();
     6                     treeNode.Text = item.Name;
     7                     treeNode.Tag = item;
     8                     tvAllDirectoryInfo.Nodes.Add(treeNode);
     9                     DirectoryInfo directory = item.RootDirectory;
    10                     //获取驱动器下所有的文件夹信息
    11                     DirectoryInfo[] allDirectory = directory.GetDirectories();
    12                     foreach (DirectoryInfo dir in allDirectory)
    13                     {
    14                         TreeNode subTreeNode = new TreeNode();
    15                         subTreeNode.Text = dir.Name;
    16                         subTreeNode.Tag = dir;
    17                         treeNode.Nodes.Add(subTreeNode);
    18                     }
    19                 }
    20             }
    修改

    接下来就是文件或文件夹的复制问题了.(右键菜单添加复制和删除)

    文件夹是没办法跨磁盘移动的,如果要移动只能在同一驱动器下!

     1         private void CopyDirectory(string srcdir, string desdir)
     2         {
     3             string folderName = srcdir.Substring(srcdir.LastIndexOf("\") + 1);
     4 
     5             string desfolderdir = desdir + "\" + folderName;
     6 
     7             if (desdir.LastIndexOf("\") == (desdir.Length - 1))
     8             {
     9                 desfolderdir = desdir + folderName;
    10             }
    11             string[] filenames = Directory.GetFileSystemEntries(srcdir);
    12 
    13             foreach (string file in filenames)// 遍历所有的文件和目录
    14             {
    15                 if (Directory.Exists(file))// 先当作目录处理如果存在这个目录就递归Copy该目录下面的文件
    16                 {
    17 
    18                     string currentdir = desfolderdir + "\" + file.Substring(file.LastIndexOf("\") + 1);
    19                     if (!Directory.Exists(currentdir))
    20                     {
    21                         Directory.CreateDirectory(currentdir);
    22                     }
    23 
    24                     CopyDirectory(file, desfolderdir);
    25                 }
    26 
    27                 else // 否则直接copy文件
    28                 {
    29                     string srcfileName = file.Substring(file.LastIndexOf("\") + 1);
    30 
    31                     srcfileName = desfolderdir + "\" + srcfileName;
    32 
    33 
    34                     if (!Directory.Exists(desfolderdir))
    35                     {
    36                         Directory.CreateDirectory(desfolderdir);
    37                     }
    38 
    39 
    40                     File.Copy(file, srcfileName);
    41                 }
    42             }//foreach 
    43         }
    文件或文件夹复制

    使用递归操作.

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

     

  • 相关阅读:
    使用python将字符串首字母转成大写,且字符串其余字母保持不变
    运用tenacity库来提高自动化用例的稳定性
    使用python调用钉钉开放接口,现实给员工单独发送钉钉通知消息
    Python中关于时间的使用场景
    vim 练习1 20200417
    概率论与数理统计 习题三 题目及答案
    概率论与数理统计 习题二 题目及答案
    (哈) 四种算法 MVP!!!
    (哈)先来先服务(FCFS)调度算法 --升级版
    (哈) 短作业调度算法
  • 原文地址:https://www.cnblogs.com/Serean/p/4656070.html
Copyright © 2011-2022 走看看