#region TreeView树形显示磁盘下文件夹
/// <summary>
/// IconIndexs类 对应ImageList中5张图片的序列
/// </summary>
private class IconIndexes
{
public const int MyComputer = 0; //我的电脑
public const int ClosedFolder = 1; //文件夹关闭
public const int OpenFolder = 2; //文件夹打开
public const int FixedDrive = 3; //磁盘盘符
public const int MyDocuments = 4; //我的文档
}

/// <summary>
/// 窗体加载Load事件 初始化
/// </summary>
private void Form1_Load(object sender, EventArgs e)
{
//实例化TreeNode类 TreeNode(string text,int imageIndex,int selectImageIndex)
TreeNode rootNode = new TreeNode("我的电脑",
IconIndexes.MyComputer, IconIndexes.MyComputer); //载入显示 选择显示
rootNode.Tag = "我的电脑"; //树节点数据
rootNode.Text = "我的电脑"; //树节点标签内容
this.directoryTree.Nodes.Add(rootNode); //树中添加根目录

//显示MyDocuments(我的文档)结点
var myDocuments = Environment.GetFolderPath //获取计算机我的文档文件夹
(Environment.SpecialFolder.MyDocuments);
TreeNode DocNode = new TreeNode(myDocuments);
DocNode.Tag = "我的文档"; //设置结点名称
DocNode.Text = "我的文档";
DocNode.ImageIndex = IconIndexes.MyDocuments; //设置获取结点显示图片
DocNode.SelectedImageIndex = IconIndexes.MyDocuments; //设置选择显示图片
rootNode.Nodes.Add(DocNode); //rootNode目录下加载节点
DocNode.Nodes.Add("");

//循环遍历计算机所有逻辑驱动器名称(盘符)
foreach (string drive in Environment.GetLogicalDrives())
{
//实例化DriveInfo对象 命名空间System.IO
var dir = new DriveInfo(drive);
switch (dir.DriveType) //判断驱动器类型
{
case DriveType.Fixed: //仅取固定磁盘盘符 Removable-U盘
{
//Split仅获取盘符字母
TreeNode tNode = new TreeNode(dir.Name.Split(':')[0]);
tNode.Name = dir.Name;
tNode.Tag = tNode.Name;
tNode.ImageIndex = IconIndexes.FixedDrive; //设置获取结点显示图片
tNode.SelectedImageIndex = IconIndexes.FixedDrive; //设置选择显示图片
directoryTree.Nodes.Add(tNode); //加载驱动节点
tNode.Nodes.Add("");
}
break;
}
}
rootNode.Expand(); //展开树状视图

//调用SetListView()函数初始化设置ListView
SetListView();
}

/// <summary>
/// 在结点展开后发生 展开子结点
/// </summary>
private void directoryTree_AfterExpand(object sender, TreeViewEventArgs e)
{
e.Node.Expand();
}

/// <summary>
/// 在将要展开结点时发生 加载子结点
/// </summary>
private void directoryTree_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
TreeViewItems.Add(e.Node);
}

/// <summary>
/// 自定义类TreeViewItems 调用其Add(TreeNode e)方法加载子目录
/// </summary>
public static class TreeViewItems
{
public static void Add(TreeNode e)
{
//try..catch异常处理
try
{
//判断"我的电脑"Tag 上面加载的该结点没指定其路径
if (e.Tag.ToString() != "我的电脑")
{
e.Nodes.Clear(); //清除空节点再加载子节点
TreeNode tNode = e; //获取选中\展开\折叠结点
string path = tNode.Name; //路径

//获取"我的文档"路径
if (e.Tag.ToString() == "我的文档")
{
path = Environment.GetFolderPath //获取计算机我的文档文件夹
(Environment.SpecialFolder.MyDocuments);
}

//获取指定目录中的子目录名称并加载结点
string[] dics = Directory.GetDirectories(path);
foreach (string dic in dics)
{
TreeNode subNode = new TreeNode(new DirectoryInfo(dic).Name); //实例化
subNode.Name = new DirectoryInfo(dic).FullName; //完整目录
subNode.Tag = subNode.Name;
subNode.ImageIndex = IconIndexes.ClosedFolder; //设置获取节点显示图片
subNode.SelectedImageIndex = IconIndexes.OpenFolder; //设置选择节点显示图片
tNode.Nodes.Add(subNode);
subNode.Nodes.Add(""); //加载空节点 实现+号
}
}
}
catch (Exception msg)
{
MessageBox.Show(msg.Message); //异常处理
}
}
}
#endregion

/// <summary>
/// 自定义函数设置ListView控件初始属性
/// </summary>
private void SetListView()
{
//行和列是否显示网格线
this.filesList.GridLines = false;
//显示方式(注意View是Details详细显示)
this.filesList.View = View.Details;
//是否可编辑
this.filesList.LabelEdit = true;
//没有足够的空间显示时,是否添加滚动条
this.filesList.Scrollable = true;
//对表头进行设置
this.filesList.HeaderStyle = ColumnHeaderStyle.Clickable;
//是否可以选择行
this.filesList.FullRowSelect = true;

//设置listView列标题头 宽度为9/13 2/13 2/13
//其中设置标题头自动适应宽度,-1根据内容设置宽度,-2根据标题设置宽度
this.filesList.Columns.Add("名称", 9 * filesList.Width / 13);
this.filesList.Columns.Add("大小", 2 * filesList.Width / 13);
this.filesList.Columns.Add("类型", 2 * filesList.Width / 13);
}

#region ListView显示选中文件夹中文件内容
/// <summary>
/// 获取节点的路径:递归调用产生节点对应文件夹的路径
/// </summary>
/// <param name="node"></param>
/// <returns></returns>
private string GetPathFromNode(TreeNode node)
{
//注意:树形控件中我只赋值Tag\Name,使用Text时赋值即可使用
if (node.Parent == null)
{
return node.Name;
}
//Path.Combine组合产生路径 如 Path.Combine("A","B")则生成"A\\B"
return Path.Combine(GetPathFromNode(node.Parent), node.Name);
}

/// <summary>
/// 更改选定内容后发生 后去当前节点名字
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void directoryTree_AfterSelect(object sender, TreeViewEventArgs e)
{
try
{
//定义变量
long length; //文件大小
string path; //文件路径
TreeNode clickedNode = e.Node; //获取当前选中结点

//移除ListView所有项
this.filesList.Items.Clear();

//获取路径赋值path
if (clickedNode.Tag.ToString() == "我的文档")
{
//获取计算机我的文档文件夹
path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
}
else
{
//通过自定义函数GetPathFromNode获取结点路径
path = GetPathFromNode(clickedNode);
}

//由于"我的电脑"为空结点,无需处理,否则会出现路径获取错误或没有找到"我的电脑"路径
if (clickedNode.Tag.ToString() != "我的电脑")
{
//数据更新 UI暂时挂起直到EndUpdate绘制控件,可以有效避免闪烁并大大提高加载速度
this.filesList.BeginUpdate();
//实例目录与子目录
DirectoryInfo dir = new DirectoryInfo(path);
//获取当前目录文件列表
FileInfo[] fileInfo = dir.GetFiles();
//循环输出获取文件信息
for (int i = 0; i < fileInfo.Length; i++)
{
ListViewItem listItem = new ListViewItem();
//listItem.SubItems[0].Text = fileInfo[i].Name; //文件名(方法二)
listItem.Text = "[" + (i + 1) + "] " + fileInfo[i].Name; //显示文件名
listItem.ForeColor = Color.Blue; //设置行颜色

//length/1024转换为KB字节数整数值 Ceiling返回最小整数值 Divide除法
length = fileInfo[i].Length; //获取当前文件大小字节
listItem.SubItems.Add(Math.Ceiling(decimal.Divide(length, 1024)) + " KB");

//获取文件最后访问时间
//listItem.SubItems.Add(fileInfo[i].LastWriteTime.ToString());

//获取文件扩展名时可用Substring除去点 否则显示".txt文件"
listItem.SubItems.Add(fileInfo[i].Extension + "文件");
//加载数据至filesList
this.filesList.Items.Add(listItem);
}
//结束数据处理,UI界面一次性绘制 否则可能出现闪动情况
this.filesList.EndUpdate();
}
}
catch (Exception msg) //异常处理
{
MessageBox.Show(msg.Message);
}

}
#endregion
}
}

Treeview显示磁盘下的文件,并且可操作的更多相关文章

  1. [转] C#2010 在TreeView控件下显示路径下所有文件和文件夹

    原文 张丹-小桥流水,C#2010 在TreeView控件下显示路径下所有文件和文件夹 C#2010学习过程中有所收获,便总结下来,希望能给和我一样在学习遇到困难的同学提供参考. 本文主要介绍两个自定 ...

  2. 使用nio对磁盘下的文件进行过滤

    上篇博文讲到为了解决tomcat日志自动清理的问题,翻看了tomcat-juli这个jar包.在FileHandler类下有一个利用nio完成对磁盘下过期文件进行过滤的功能实现,正好这段时间正在学习n ...

  3. 遍历、显示ftp下的文件夹和文件信息

    今天做了通过ftp读取ftp根目录下的所有文件夹和文件,嵌套文件夹查询,总共用到了一下代码: 1.FtpFile_Directory package com.hs.dts.web.ftp; impor ...

  4. java 显示目录下全部文件

    package gao.org; import java.awt.HeadlessException; import java.io.File; import javax.swing.JFileCho ...

  5. Fedora中显示windows下的文件

    目录 一些预备知识: 在中国windows的编码是本地编码 , 即GBK,GB2312,GB18030等 GBK  也就是windows-986 Windows现在只支持Unicode (UTF-16 ...

  6. 46-df 显示磁盘空间的使用情况

    显示磁盘空间的使用情况 df [options] [filesystem-list] 参数 当不带任何参数调用df时,用户将获得本地系统上每个挂载设备的空闲空间 filesystem-list是一个或 ...

  7. 使用os模块实现展示目录下的文件和文件夹

    Windows 10家庭中文版,Python 3.6.4 今天学习了os模块,下面是使用它开发的一个展示目录下的文件和文件夹的函数,代码如下: import os # deep大于等于1的整数,默认为 ...

  8. Linux:Day7(下) 磁盘管理、文件系统管理

    Linux入门 Linux系统管理: 磁盘管理.文件系统管理 RAID基本原理.LVM2 网络管理:TCP/IP协议.Linux网络属性配置 程序包管理:rpm,yum 进程管理:htop,glanc ...

  9. 解决eclipse maven工程中src/main/resources目录下创建的文件夹所显示样式不是文件夹,而是"包"图标样式的问题

    参考:http://blog.csdn.net/luwei42768/article/details/72268246 eclipse项目中创建maven项目后,有时在执行命令maven update ...

随机推荐

  1. jQuery Mobile 自定义按钮图标

    自定义css样式---红色部分必须加上 .ui-icon-user-black:after {background:url('../image/user-black.png') no-repeat 0 ...

  2. BNU OJ 50998 BQG's Messy Code

    #include <cstdio> #define _(l) int l #define ___(l,L) for (_(o)=0,x=l o*2;o<x;o++)O= L o; # ...

  3. 我的云服务之WWW

    云服务器系统是:[root@ip-172-31-27-132 system]# cat /etc/redhat-release Red Hat Enterprise Linux Server rele ...

  4. CDOJ 1270 Playfair

    模拟题,代码写得比较乱... #include<cstdio> #include<cstring> #include<cmath> #include<queu ...

  5. jquery中:input和input的区别分析

    :input表示选择表单中的input,select,textarea,button元素,input仅仅选择input元素. <html> <head> <style&g ...

  6. Laravel Eloquent get获取空的数据问题

    在用laravel框架来获取数据,若数据不存在时,以为会返回空,其实不是的,其实是一个 collection 值,会返回如下: object(Illuminate\Database\Eloquent\ ...

  7. (中等) HDU 5046 Airport ,DLX+可重复覆盖+二分。

    Description The country of jiuye composed by N cites. Each city can be viewed as a point in a two- d ...

  8. csv和excel的区别

    excel 文件只能通过excel打开,里面包含公式或者计算. csv文件是一种通用数据格式,可以用很多方式打开,比如excel.csv 以分割数据,用行分割符号分割行级数据,直接上个例子一目了然. ...

  9. Tomcat热部署:Maven项目一键部署到Tomcat服务器 - 支持多环境

    参考:Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署 命令 debug模式设置关联源码 eclipse --> 项目右键 --> Debug As --& ...

  10. css布局-多行文字垂直居中

    方法一: 代码: <style> *{padding: ;margin:;font-size: 12px;} div{float: left;width: 200px;height:200 ...