【Treeview】遍历本地磁盘
一、前言
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】遍历本地磁盘的更多相关文章
- 基于Treeview控件遍历本地磁盘
一.前言 Treeview控件常用于遍历本地文件信息,通常与Datagridview与ImageList搭配.ImageList控件用于提供小图片给TreeView控件,DatagridView通常显 ...
- .Net 使用爬虫下载网络图片到本地磁盘
准备: 1.新建控制台项目 2.引用System.Drawing类库 3.安装HtmlAgilityPack 1.5.2.0 4.如果不会XPath语法的话,建议简单看下 代码: static voi ...
- windows 挂载windows 共享盘为本地磁盘
我们在设置数据库自动备份时,为了数据的安全往往需要直接将数据备份到远程服务器上.在Linux可以通过NFS挂载来实现,在Windows平台可以直接通过net use+subst来实现将远程服务器的目录 ...
- Ubuntu SSH 客户端的应用 | sshfs映射远程文件系统为本地磁盘
SSH是指Secure Shell,是一种安全的传输协议. Ubuntu客户端通过SSH访问远程服务器 ,以下步骤是客户端 的配置方法: 1. sudo apt-get install ssh 2. ...
- linux 下载文件到本地磁盘的命令是什么
linux下可以直接运行命令下载或上传文件1.检查并安装相应的包:yum install lrzsz2.使用 sz 文件名 现在相应的文件到本地磁盘.3.上传使用rz 选择相应文件即可.
- Tomcat服务器如何读取本地磁盘数据?
实际问题: 如何让用户下载本地磁盘的资源文件呢? 在server.xml文件中配置虚拟路径如下(以下代码放在Host标签之中即可): 例如: 具体含义: 把本地磁盘目录 "D:\uploa ...
- 实验六:通过grub程序引导本地磁盘内核启动系统(busybox)
实验名称: 通过grub程序引导本地磁盘内核启动系统(busybox) 实验环境: 理论上,该实验只需要配置好xen环境即可,但是,我们的xen环境安装在centOS7上,但是我们又是使用的kerne ...
- 使用NetDrive将虚拟机映射到本地磁盘,使用smba映射本地磁盘(替代FileZilla)
使用NetDrive映射到本地磁盘 使用NetDrive软件来替代FileZilla,NetDrive是一个能把FTP空间虚拟成本地硬盘的软件,这样我们就不需要再使用FileZilla来来回拷贝文件了 ...
- windows 10 超级优化,同时解决本地磁盘100%的问题
windows 10 超级优化,同时解决本地磁盘100%的问题 我的系统是笔记本I7处理器,配置了web服务器IIS 和一个数据库(mysql7),同时启用了虚拟机(表中已禁用),以及安装了offic ...
随机推荐
- 在docker中执行linux shell命令
在docker中执行shell命令,需要在命令前增加sh -c,例如: docker run ubuntu sh -c 'cat /data/a.txt > b.txt' 否则,指令无法被正常解 ...
- 2019年猪年颁奖典礼、公司年会、跨年晚会、科技会议、年终答谢会之幕布背景展板PSD模板-第三部分
16套--2019年猪年颁奖典礼.公司年会.跨年晚会.科技会议.年终答谢会之幕布.背景和展板PSD模板,免费颁奖典礼PSD展板背景幕布,下载地址:百度网盘,https://pan.baidu.com/ ...
- 用Micro:bit做床头灯
这是一个非常简单的项目,给孩子们介绍感应和控制,使用光敏电阻LDR作为光线传感器和床头灯的LED. 这也介绍了模拟输入的概念.数字输入为ON或OFF.只有0和1两种可能的条件.仿真输入是一系列可能值中 ...
- python程序设计——面向对象程序设计:属性
python 3.x 的属性 可以将属性设置为 可读,可修改,可删除 # 只读属性,不允许修改和删除 class Test: def __init__(self,value): self.__valu ...
- 在Office 365 的如何给管理员赋予查看所有人邮箱的权限的Powershell
连接至Office365 的Powershell Get-MsolUser -UserPrincipalName admin@***.partner.onmschina.cn //Get-MsolUs ...
- cs231n学习笔记(一)计算机视觉及其发展史
在网易云课堂上学习计算机视觉经典课程cs231n,觉得有必要做个笔记,因为自己的记性比较差,留待以后查看. 每一堂课都对应一个学习笔记,下面就开始第一堂课. 这堂课主要是回顾了计算机视觉的起源及其后来 ...
- BVT、EVT、DVT、PVT产品开发几个阶段
EVT EVT(Engineering Verification Test) 工程验证 产品开发初期的设计验证.设计者实现样品时做初期的测试验证,包括 功能和安规测试,一般由 RD(Researc ...
- Yii2 yii\helpers\ArrayHelper
yii\helpers\ArrayHelper 是一个数组辅助类,提供额外的数组功能函数 toArray($object, $properties = [], $recursive = true) C ...
- sprint3最终演示及团队贡献分
团队名:在考虑 团队项目:复利计算 项目演示: 之前的功能都有演示过就不再一一截图,把我们新增加的功能说一下 首先用户进入我们的网页可以登录或者注册,注册的用户可以直接输入用户名及密码登录,没有注册的 ...
- 基于NABCD评论探路者团队贪吃蛇作品及改进建议
1.根据(不限于)NABCD评论作品的选题 N:随着人们生活压力越来越大,需要去去缓解压力,并且也需要不断进步,学习英语知识. A:它是基于java开发的一款软件,采用逐个吃字母,加长蛇身,增强记忆的 ...