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

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

: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”
时间: 2024-10-05 23:50:08

自己动手做一个小型“资源管理器”吧的相关文章

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

初次接触到IO流,根据书本上的知识,加上自己的摸索,发现了一些好玩的事情.(书本上的知识或多或少,有时候不足以解决我们的问题!这时候我们就应该自己去求解!!! 所以我们学习的时候要抱有探索的精神,求知若渴是帮助我们获取更多知识的一种积极的精神态度,需要保持) 小型资源管理器 该项目主要是为了加载电脑磁盘中存在的所有文件夹和文件(directory,file) 这时候我遇到了第一个问题:书本上只有将指定的磁盘设为根节点,在窗体TreeView中添加该磁盘中的文件夹 (我去,那如果我的电脑上分了几十

IO流之小型资源管理器概述

小型资源管理器完成示例图: 实现思路及关键代码用于参考 1.创建一个根节点 2.加载路径文件 3.加载所以文件 4.获取节点 5.文件或文件夹的复制

使用Windows Form 制作一个简易资源管理器

自制一个简易资源管理器----TreeView控件 第一步.新建project,进行基本设置:(Set as StartUp Project:View/Toolbox/TreeView) 第二步.开始添加节点 添加命名空间using System.IO; 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Dra

IO流的应用————小型资源管理器

小型资源管理器 private void LoadTreeView() { DirectoryInfo dir = new DirectoryInfo(@"E:\"); DirectoryInfo[] dirs= dir.GetDirectories(); foreach (DirectoryInfo item in dirs) { TreeNode tn = new TreeNode(); tn.Text = item.Name; tn.Tag = item.FullName; th

C# 小型资源管理器

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 小型资源管理器 { public class MyFile { public float FileLength { get; set; }//文件长度(KB) public string FileName { get; set; }//文件名 pu

如何做一个小型公司的技术总监

本文在腾讯内部论坛被浏览达7347次,收藏615次,评论几百条,曾经是讨论最热烈的项目管理文章之一.作为作者本身,感觉这个话题可以讨论的范围非常大,希望能有更多朋友一起切磋探索技术团队的管理之道. 资深程序员是团队中最强大的生产力,但往往被不合理的工作安排浪费掉.因此作为一个团队的技术的"头",必须要有明确清晰的认识,把主要的事务性工作剥离出来.并且放弃大量的管理"权力",以提高团队开发质量和效率为最主要的目标去安排自己的工作.一般来说技术总监其实会被要求做事实上是

【python基础】用字典做一个小型的查询数据库

例子来源于<python基础教程>第三版,57p 该例子主要是使用字典的方式,实现一个小型的数据库,通过查询字典的键值来获取用户的信息. 本人修改了部分代码. #!/usr/bin/python3 -*- coding:utf-8 -*- # 使用字典构建一个简单的数据库 #导入模块,主要为了做异常退出 import os # 构建people字典,用来存储用户信息 people = { 'Ailce':{ 'phone': '2341', 'addr': 'Foo drive 23' },

用树莓派Raspberry Pi和Micro:bit做一个自拍器

在这个项目中,我们将使用Python来构建一个由Micro:bit触发树莓派Raspberry Pi和相机模块的自拍器.这是开始使用硬件和简单文本编程的好方法. 我们将学习: 如何设置Raspberry Pi相机 如何在Micro:bit和Raspberry Pi上使用输入和输出引脚 用Python代码控制GPIO引脚 用Python代码控制相机模块 材料: 带有SD卡和常规外围设备的Raspberry Pi Raspberry Pi camera module Micro:bit USB A

教你动手做一个 iOS 越狱 app

前言 俗话说得好, 万事开头难. 仅仅是上图一个如此简单地不能再简单的小app, 其实都不算是app, 只是注入了一段代码进系统中, 等到特定的函数方法调用的时候就会被我们hook掉, 执行我们写的代码, 仅此而已. 哈哈, 就是这样一个小功能, 搞得我焦头烂额了一个晚上, 所以大家不用害怕, 连我这样的菜鸟都能实现, 大家只要认真看我的总结, 就一定可以自己也动手在自己越狱iPhone, iPad上嗨起来! ps : 为了纪念这神圣的一刻, 就算是这么简单的程序我也把它放到了我的Github上