你的位置:首页 > ASP.net教程

[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       //绑定listView27       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”