zoukankan      html  css  js  c++  java
  • 自己动手做一个小型“资源管理器”吧

    自己动手做一个小型“资源管理器”吧

     

    :tvDirectory是treeView控件,lvDirectory是listView控件

    首先搭建一下界面:

    左边是treeView控件,右边是listView控件。(listView的网格线只需把GridLins设置成True就可以了。

    由于要用到IO流,所以别忘了导入命名空间:using System.IO;

     

    我们只要创建一个文件类就可以了:

     1 public class MyFile
     2     {
     3         //文件长度
     4         public float FileLength { get; set; }
     5         //文件名
     6         public string FileName { get; set; }
     7         //文件路径
     8         public string FilePath { get; set; }
     9         //文件类型
    10         public string FileType { get; set; }
    11     }

    现在先来加载一下驱动器,四行代码轻松搞定:

    1 //加载驱动器
    2         private void LoadRootNode()
    3         {
    4             TreeNode tn = new TreeNode();
    5             tn.Text = "D:\";
    6             tn.Tag = "D:\";
    7             this.tvDirectory.Nodes.Add(tn);
    8         }

    接下来是一步步的绑定:

     1 private void BingInfo(TreeNode node) 
     2         {
     3             //绑定子目录
     4             DirectoryInfo directoryInfo = new DirectoryInfo(node.Tag.ToString());
     5             DirectoryInfo[] dirs = directoryInfo.GetDirectories();
     6             foreach (DirectoryInfo di in dirs)
     7             {
     8                 TreeNode temp = new TreeNode();
     9                 temp.Text = di.Name;
    10                 temp.Tag = di.FullName;
    11                 node.Nodes.Add(temp);
    12             }
    13 
    14             //绑定本目录中的文件
    15             FileInfo[] fileInfo = directoryInfo.GetFiles();
    16             List<MyFile> files = new List<MyFile>();
    17             foreach (FileInfo myFile in fileInfo)
    18             {
    19                 MyFile file = new MyFile();
    20                 file.FileName = myFile.Name;
    21                 file.FileLength = myFile.Length;
    22                 file.FileType = myFile.Extension;
    23                 file.FilePath = myFile.FullName;
    24                 files.Add(file);
    25             }
    26             //绑定listView
    27             ListViewItem item = null;
    28             this.lvDirectory.Items.Clear();
    29             foreach (MyFile file in files)
    30             {
    31                 item = new ListViewItem();
    32                 item.Text = file.FileName;
    33                 item.SubItems.Add(file.FileLength.ToString());
    34                 item.SubItems.Add(file.FileType);
    35                 item.SubItems.Add(file.FilePath);
    36                 this.lvDirectory.Items.Add(item);
    37             }

    绑定listView也可以单独写成一个方法然后在BingInfo()方法中调用一下:

     1 public void ShowFiles(List<MyFile> files)
     2         {
     3             ListViewItem item = null;
     4             this.lvDirectory.Items.Clear();
     5             foreach (MyFile file in files)
     6             {
     7                 item = new ListViewItem();
     8                 item.Text = file.FileName;
     9                 item.SubItems.Add(file.FileLength.ToString());
    10                 item.SubItems.Add(file.FileType);
    11                 item.SubItems.Add(file.FilePath);
    12                 this.lvDirectory.Items.Add(item);
    13             }
    14 
    15         }

    调用方法:

    1 ShowFiles(files);

    之后需要在treeView控件的AfterSelect事件中添加如下代码:

    1         private void tvDirectory_AfterSelect(object sender, TreeViewEventArgs e)
    2         {
    3             TreeNode node = this.tvDirectory.SelectedNode;
    4             this.BingInfo(node);
    5         }

    再在Load中调用一下就可以正常查看显示你所想要看的资源目录了:

    1 private void Form1_Load(object sender, EventArgs e)
    2         {
    3             LoadRootNode();
    4         }

    既然是资源管理器,那么肯定要有文件的复制和删除等基本功能,接下来实现复制删除功能:

    复制时需要弹出“浏览文件夹”窗口,这时需要用到FolderBrowserDialog类:

    1             //提示用户选择文件夹
    2             FolderBrowserDialog fbd = new FolderBrowserDialog();
    3             DialogResult result = fbd.ShowDialog();

    复制时如果选择了正确的位置,则执行复制操作:

    1             if (result == DialogResult.OK)
    2             {
    3                 desPath = fbd.SelectedPath;
    4                 desPath += "\" + lvDirectory.SelectedItems[0].SubItems[0].Text;
    5                 //复制文件
    6                 File.Copy(sourcePath, desPath);
    7                 MessageBox.Show("复制成功!");
    8             }   

    完整复制代码如下:

     1 private void tsmiCopy_Click(object sender, EventArgs e)
     2         {
     3             if (this.lvDirectory.SelectedItems.Count == 0)
     4             {
     5                 return;
     6             }
     7             //提示用户选择文件夹
     8             FolderBrowserDialog fbd = new FolderBrowserDialog();
     9             DialogResult result = fbd.ShowDialog();
    10 
    11             //源文件路径
    12             string sourcePath = lvDirectory.SelectedItems[0].SubItems[3].Text;
    13             //目标文件路径
    14             string desPath = null;
    15             //如果正确选择目标位置,执行复制操作
    16 
    17             if (result == DialogResult.OK)
    18             {
    19                 desPath = fbd.SelectedPath;
    20                 desPath += "\" + lvDirectory.SelectedItems[0].SubItems[0].Text;
    21                 //复制文件
    22                 File.Copy(sourcePath, desPath);
    23                 MessageBox.Show("复制成功!");
    24             }   
    25         }

    接下来是删除,删除完要及时刷新:

    1 this.lvDirectory.SelectedItems[0].Remove();

    完整删除代码如下:

     1 private void tmsiDelete_Click(object sender, EventArgs e)
     2         {
     3             if (this.lvDirectory.SelectedItems.Count == 0)
     4             {
     5                 return;
     6             }
     7             //要删除的文件
     8             string sourcePath = lvDirectory.SelectedItems[0].SubItems[3].Text;
     9             DialogResult result = MessageBox.Show(this, "确定要删除吗?", "警告!", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
    10             if (result == DialogResult.OK)
    11             {
    12                 File.Delete(sourcePath);
    13                 MessageBox.Show("删除成功!");
    14             }
    15             //刷新一下
    16             this.lvDirectory.SelectedItems[0].Remove();
    17         }

    以上就是一个小型的资源管理器的制作过程了。

    完成之后界面:

    这里我只写了D盘,大家可以接着写其他的盘符。

    跨驱动器复制方法:

     1 private void CopyDirectoryAndFiles(string des, DirectoryInfo srcDir)
     2         {
     3             if (!des.EndsWith("\"))
     4             {
     5                 des += "\";
     6             }
     7             string desPath = des + srcDir.Name + "\";
     8             if(!Directory.Exists(desPath))
     9             {
    10                 Directory.CreateDirectory(desPath);
    11             }
    12              
    13             foreach (FileInfo file in srcDir.GetFiles())
    14             {
    15                 file.CopyTo(desPath + file.Name, true);
    16             }
    17             foreach (DirectoryInfo dirinfo in srcDir.GetDirectories())
    18             {
    19                 CopyDirectoryAndFiles(desPath, dirinfo);
    20             }
    21         }

    C#路径书写的问题:

    如果写成

    1 string path="D:Text.txt";

    程序会报“无法识别的转义序列”错误,所以C#提供了两种方法:

    1 (第一种)将路径改为“D:\Text.txt”
    1 (第二种)@“D:\Text.txt”
  • 相关阅读:
    给出字符串
    Closest
    最短路计数(spfa)
    Cleaning Shifts
    Mr. Young's Picture Permutations
    Georgia and Bob
    GCD
    Cutting Game
    SP4191 MSKYCODE
    [CQOI2013]新Nim游戏
  • 原文地址:https://www.cnblogs.com/wcf6676/p/4655437.html
Copyright © 2011-2022 走看看