一、前言

Treeview控件常用于遍历本地文件信息,通常与Datagridview与ImageList搭配。ImageList控件用于提供小图片给TreeView控件,DatagridView通常显示TreeNode节点下文件及文件夹的信息。

效果图:

     

二、代码

初始化窗体:

private void ManagerForm_Load(object sender, EventArgs e)
{
InitialDataGridView(dgv_Local); //初始化本地dgv InitialTreeView(); //初始化本地tree
}

初始化DataGridView:

 public void InitialDataGridView(DataGridView dgv)
{
DataGridViewColumn dgv_check = new DataGridViewCheckBoxColumn();
dgv_check.HeaderText = "选择";
dgv.Columns.Add(dgv_check); DataGridViewColumn dgv_name = new DataGridViewTextBoxColumn();
dgv_name.HeaderText = "名称";
dgv.Columns.Add(dgv_name);
dgv_name.ReadOnly = true; DataGridViewColumn dgv_length = new DataGridViewTextBoxColumn();
dgv_length.HeaderText = "大小";
dgv.Columns.Add(dgv_length);
dgv_length.ReadOnly = true; DataGridViewColumn dgv_type = new DataGridViewTextBoxColumn();
dgv_type.HeaderText = "类型";
dgv.Columns.Add(dgv_type);
dgv_type.ReadOnly = true; DataGridViewColumn dgv_version = new DataGridViewTextBoxColumn();
dgv_version.HeaderText = "版本";
dgv.Columns.Add(dgv_version);
dgv_version.ReadOnly = true; dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dgv.AllowUserToAddRows = false;
dgv.RowHeadersVisible = false;
dgv.AllowUserToResizeRows = false;
dgv.Columns[].Width = (int)((double)(dgv.Width) * 0.1);
dgv.Columns[].Width = (int)((double)(dgv.Width) * 0.45);
}

初始化本地TreeView:

public void InitialTreeView()
{
TreeNode tv_mycomputer = new TreeNode("我的电脑");
tv_mycomputer.ImageIndex = ;
tv_mycomputer.SelectedImageIndex = ;
tv_Local.Nodes.Add(tv_mycomputer); DriveInfo[] drives = DriveInfo.GetDrives();
string driveName = "";
foreach (DriveInfo drive in drives)
{
switch (drive.DriveType)
{
case DriveType.Fixed:
driveName = "本地磁盘(" + drive.Name.Substring(, ) + ")";
break;
case DriveType.Removable:
driveName = "可移动磁盘(" + drive.Name.Substring(, ) + ")";
break;
case DriveType.CDRom:
driveName = "DVD驱动器(" + drive.Name.Substring(, ) + ")";
break;
case DriveType.Network:
driveName = "网络驱动器(" + drive.Name.Substring(, ) + ")";
break;
default:
driveName = "未知(" + drive.Name + ")";
break;
}
TreeNode tr_cd = new TreeNode();
tr_cd.Text = driveName;
tr_cd.ImageIndex = ;
tr_cd.SelectedImageIndex = ;
LoadDirectory(Path.GetFullPath(drive.Name), tr_cd); //取得第一级磁盘信息
tv_mycomputer.Nodes.Add(tr_cd);
}
}

LoadDirectory方法:

public void LoadDirectory(string path, TreeNode tNode)
{
try
{
//遍历文件夹信息
string[] directorys = Directory.GetDirectories(path);
foreach (string item in directorys)
{
if ((File.GetAttributes(item) & FileAttributes.Hidden) != FileAttributes.Hidden)
{
TreeNode tn_Dir = new TreeNode(Path.GetFileName(item));
tn_Dir.ImageIndex = ;
tn_Dir.SelectedImageIndex = ;
tn_Dir.Name = item;
tNode.Nodes.Add(tn_Dir);
}
}
if (path.Contains("System Volume Information"))
{
return;
} //遍历文件信息
string[] files = Directory.GetFiles(path);
foreach (string item in files)
{
string eName = Path.GetExtension(item);
if ((File.GetAttributes(item) & FileAttributes.Hidden) != FileAttributes.Hidden)
{
TreeNode tn_file = new TreeNode(Path.GetFileNameWithoutExtension(item));
tn_file.ImageIndex = ;
tn_file.SelectedImageIndex = ;
tn_file.Name = item;
tNode.Nodes.Add(tn_file);
}
}
}
catch { }
}

AfterExpand方法:用于点击Node时快速加载,而不是在窗体加载时直接加载整个电脑的磁盘信息,因为那样太慢了

 private void tv_Local_AfterExpand(object sender, TreeViewEventArgs e)
{
if (e.Node.Level >= )
{
foreach (TreeNode tnode in e.Node.Nodes)
{
tnode.Nodes.Clear();
if (!Path.HasExtension(tnode.Name))
{
LoadDirectory(tnode.Name, tnode);
}
}
}
}

NodeMouseClick:点击Node显示该节点信息

private void tv_Local_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
Thread.Sleep();
if(e.Node.FullPath=="我的电脑")
{
txt_Local.Text = "My Computer";
}
else if(e.Node.FullPath.Contains("(")&&e.Node.Level<=)
{
txt_Local.Text = e.Node.FullPath.Split('\\')[].Split('(')[].Replace(')','\\');
}
else
{
txt_Local.Text = e.Node.Name;
this.dgv_Local.Rows.Clear();
if (e.Node.Level > )
{
Loadallinfo(e.Node.Name, dgv_Local);
}
} }

Loadallinfo:用于DataGridview显示信息

 public void Loadallinfo(string path,DataGridView dgv)
{
if (Directory.Exists(path))
{
try
{
string[] directorys = Directory.GetDirectories(path); //获取选中treeview节点的子目录
foreach (string item in directorys)
{
if ((File.GetAttributes(item) & FileAttributes.Hidden) != FileAttributes.Hidden)
{
int index = dgv.Rows.Add();
dgv.Rows[index].Cells[].Value = item;
dgv.Rows[index].Cells[].Value = CountSize(GetDirectoryLength(item)).ToString();
dgv.Rows[index].Cells[].Value = "文件夹";
dgv.Rows[index].Cells[].Value = "";
}
}
if (path.Contains("System Volume Information"))
{
return;
}
string[] files = Directory.GetFiles(path);
foreach (string item in files)
{
string eName = Path.GetExtension(item);
if ((File.GetAttributes(item) & FileAttributes.Hidden) != FileAttributes.Hidden)
{
int index = dgv.Rows.Add();
dgv.Rows[index].Cells[].Value = item;
System.IO.FileInfo file = new System.IO.FileInfo(item);
dgv.Rows[index].Cells[].Value = CountSize(file.Length).ToString();
dgv.Rows[index].Cells[].Value = Path.GetExtension(item);
if (Path.GetExtension(item) == ".dll")
{
FileVersionInfo ver = FileVersionInfo.GetVersionInfo(item);
dgv.Rows[index].Cells[].Value = ver.FileVersion;
}
else
{
dgv.Rows[index].Cells[].Value = "";
}
}
}
}
catch { } }
else if (File.Exists(path))
{
try
{
string item = path;
int index = dgv.Rows.Add();
dgv.Rows[index].Cells[].Value = item;
dgv.Rows[index].Cells[].Value = CountSize(item.Length).ToString();
dgv.Rows[index].Cells[].Value = Path.GetExtension(item);
if (Path.GetExtension(item) == ".dll")
{
FileVersionInfo ver = FileVersionInfo.GetVersionInfo(item);
dgv.Rows[index].Cells[].Value = ver.FileVersion;
}
else
{
dgv.Rows[index].Cells[].Value = "";
}
}
catch { }
} }

计算文件大小:

 #region 文件大小换算
public static string CountSize(long Size)
{
string m_strSize = "";
long FactSize = ;
FactSize = Size;
if (FactSize < 1024.00)
m_strSize = FactSize.ToString("F2") + " B";
else if (FactSize >= 1024.00 && FactSize < )
m_strSize = (FactSize / 1024.00).ToString("F2") + " K";
else if (FactSize >= && FactSize < )
m_strSize = (FactSize / 1024.00 / 1024.00).ToString("F2") + " M";
else if (FactSize >= )
m_strSize = (FactSize / 1024.00 / 1024.00 / 1024.00).ToString("F2") + " G";
return m_strSize;
}
#endregion #region 文件夹大小计算
public static long GetDirectoryLength(string path)
{
if (!Directory.Exists(path))
{
return ;
}
long size = ;
DirectoryInfo di = new DirectoryInfo(path);
foreach (FileInfo fi in di.GetFiles())
{
size += fi.Length;
}
DirectoryInfo[] dis = di.GetDirectories();
if (dis.Length > )
{
for (int i = ; i < dis.Length; i++)
{
size += GetDirectoryLength(dis[i].FullName);
}
}
return size;
}
#endregion

【Treeview】遍历本地磁盘的更多相关文章

  1. 基于Treeview控件遍历本地磁盘

    一.前言 Treeview控件常用于遍历本地文件信息,通常与Datagridview与ImageList搭配.ImageList控件用于提供小图片给TreeView控件,DatagridView通常显 ...

  2. .Net 使用爬虫下载网络图片到本地磁盘

    准备: 1.新建控制台项目 2.引用System.Drawing类库 3.安装HtmlAgilityPack 1.5.2.0 4.如果不会XPath语法的话,建议简单看下 代码: static voi ...

  3. windows 挂载windows 共享盘为本地磁盘

    我们在设置数据库自动备份时,为了数据的安全往往需要直接将数据备份到远程服务器上.在Linux可以通过NFS挂载来实现,在Windows平台可以直接通过net use+subst来实现将远程服务器的目录 ...

  4. Ubuntu SSH 客户端的应用 | sshfs映射远程文件系统为本地磁盘

    SSH是指Secure Shell,是一种安全的传输协议. Ubuntu客户端通过SSH访问远程服务器 ,以下步骤是客户端 的配置方法: 1. sudo apt-get install ssh 2. ...

  5. linux 下载文件到本地磁盘的命令是什么

    linux下可以直接运行命令下载或上传文件1.检查并安装相应的包:yum install lrzsz2.使用 sz 文件名 现在相应的文件到本地磁盘.3.上传使用rz 选择相应文件即可.

  6. Tomcat服务器如何读取本地磁盘数据?

    实际问题: 如何让用户下载本地磁盘的资源文件呢?  在server.xml文件中配置虚拟路径如下(以下代码放在Host标签之中即可): 例如: 具体含义: 把本地磁盘目录 "D:\uploa ...

  7. 实验六:通过grub程序引导本地磁盘内核启动系统(busybox)

    实验名称: 通过grub程序引导本地磁盘内核启动系统(busybox) 实验环境: 理论上,该实验只需要配置好xen环境即可,但是,我们的xen环境安装在centOS7上,但是我们又是使用的kerne ...

  8. 使用NetDrive将虚拟机映射到本地磁盘,使用smba映射本地磁盘(替代FileZilla)

    使用NetDrive映射到本地磁盘 使用NetDrive软件来替代FileZilla,NetDrive是一个能把FTP空间虚拟成本地硬盘的软件,这样我们就不需要再使用FileZilla来来回拷贝文件了 ...

  9. windows 10 超级优化,同时解决本地磁盘100%的问题

    windows 10 超级优化,同时解决本地磁盘100%的问题 我的系统是笔记本I7处理器,配置了web服务器IIS 和一个数据库(mysql7),同时启用了虚拟机(表中已禁用),以及安装了offic ...

随机推荐

  1. 【JUC源码解析】ConcurrentHashMap

    简介 支持并发的哈希表.其中包括红黑树,扩容,分槽计数等知识点. 源码分析 常量 private static final int MAXIMUM_CAPACITY = 1 << 30; ...

  2. 解析build.gradle文件

    Gradle是一个非常先进的项目构建工具,它使用了一种基于Groovy的领域特定语言DSL来声明项目设置,摒弃了传统XML(如Ant和Maven)的各种繁琐配置 项目结构如上图: 1.最外层目录下的b ...

  3. Python接口测试实战2 - 使用Python发送请求

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  4. iOS开发之多线程技术—GCD篇

    本篇将从四个方面对iOS开发中GCD的使用进行详尽的讲解: 一.什么是GCD 二.我们为什么要用GCD技术 三.在实际开发中如何使用GCD更好的实现我们的需求 一.Synchronous & ...

  5. hbase和ZooKeeper集群安装配置

    一:ZooKeeper集群安装配置 1:解压zookeeper-3.3.2.tar.gz并重命名为zookeeper. 2:进入~/zookeeper/conf目录: 拷贝zoo_sample.cfg ...

  6. scikit-learn使用PCA降维小结

    本文在主成分分析(PCA)原理总结和用scikit-learn学习主成分分析(PCA)的内容基础上做了一些笔记和补充,强调了我认为重要的部分,其中一些细节不再赘述. Jupiter notebook版 ...

  7. Scrum立会报告+燃尽图(十一月十八日总第二十六次):功能开发与讨论贡献分配规则

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284 项目地址:https://git.coding.net/zhang ...

  8. 基于DPDK的高效数据包捕获技术分析与应用

    被NFV的论文折磨了两天,今天上午看了两篇DPDK的综述. 传统的包捕获机制 1. BPF 两个组成部分:转发部分和过滤部分. 转发部分负责从链路层提取数据包并转发给过滤部分. 过滤部分根据过滤规则, ...

  9. Alpha 冲刺(6/10)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 测试服务器并行能力 学习MSI.CUDA ...

  10. IDEA + SSH OA 第一天(Hibernate : Mapping (RESOURCE) not found)

    切入主题,看看今天的错误是如何发生的: 首先这是我的项目路径,java 是 Sources Root , resources 是 Resources Root ,放了所需要的配置文件,其中 Hiber ...