public void CpuMessage()
{
DriveInfo[] dr = DriveInfo.GetDrives();
string driveName = "";
foreach (DriveInfo d in dr)
{
switch (d.DriveType)
{
case DriveType.Fixed:
driveName = "本地磁盘(" + d.Name.Substring(0,2) + ")";
break;
case DriveType.Removable:
driveName = "可移动磁盘(" + d.Name.Substring(0, 2) + ")";
break;
case DriveType.CDRom:
driveName = "DVD驱动器(" + d.Name.Substring(0, 2) + ")";
break;
case DriveType.Network:
driveName = "网络驱动器(" + d.Name.Substring(0, 2) + ")";
break;
default :
driveName = "未知(" + d.Name + ")";
break;
}
this.treeView1.Nodes.Add(d.Name, driveName);
}
}
这时我的电脑的C,D,E,F。。。等等盘的信息就添加的treeview控件的第一个节点中了。由于考虑到用递归法逐层浏览每个节点下文件的信息,所需要的时间太长(因为每个盘的文件夹确实很多,垂直方向上),所以我考虑到用数据点击节点事件。当鼠标点击每个节点时,开始执行寻找这个节点(既文件夹)下的所有一级子文件夹。这个就实现了再用户需要的时候才遍历,提高了性能。
void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Node.Nodes.Count > 0)
{
if (e.Node.IsExpanded)
{
e.Node.Collapse();
}
else
{
e.Node.Expand();
}
}
else
{
if (Directory.Exists(e.Node.Name))
{
try
{
string[] allDirectory = Directory.GetDirectories(e.Node.Name);
foreach (string s in allDirectory)
{
e.Node.Nodes.Add(s, s.Remove(0, s.LastIndexOf("\\") + 1));
}
listBox1.Items.Clear();
string[] allFiles = Directory.GetFiles(e.Node.Name);
foreach (string sf in allFiles)
{
listBox1.Items.Add(sf.Remove(0, sf.LastIndexOf("\\") + 1));
}
}
catch
{
}
}
e.Node.Expand();
}
}
并在同时寻找该节点文件夹下的所有文件。添加到右边的ListBox控件中。这样就完成的基本的浏览磁盘数据信息。写这盘文章前,在网上找了很多例子,发现大同小异,不尽人意,所以才决定自己写个简单的来测试下。希望对跟我一开始有同样问题的朋友有所帮助