
·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> 自己动手做一个小型“资源管理器”吧
自己动手做一个小型“资源管理器”吧
注: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”