下面的是前两天我用vb.net写的一个用树显示当前虚拟目录文件夹的代码,你可以参考一下:Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '在此处放置初始化页的用户代码 If Not IsPostBack Then Dim getdir As New DirectoryInfo(Server.MapPath("/")) For Each fsi As DirectoryInfo In getdir.GetDirectories Dim fi As DirectoryInfo = CType(fsi, DirectoryInfo) Dim myTreeNode As New TreeNode myTreeNode.Text = fi.Name myTreeNode.NodeData = fi.FullName TreeView1.Nodes.Add(myTreeNode) If (fi.GetDirectories.Length > 0) Then Dim myTreeNode1 As New TreeNode myTreeNode1.Text = "" TreeView1.Nodes(TreeView1.Nodes.IndexOf(myTreeNode)).Nodes.Add(myTreeNode1) End If Next End If End SubPrivate Sub TreeView1_SelectedIndexChange(ByVal sender As Object, ByVal e As Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs) Handles TreeView1.SelectedIndexChange TreeViewNodeLoad(TreeView1, e.NewNode) End SubPrivate Sub TreeView1_Expand(ByVal sender As Object, ByVal e As Microsoft.Web.UI.WebControls.TreeViewClickEventArgs) Handles TreeView1.Expand TreeViewNodeLoad(TreeView1, e.Node) End SubPrivate Sub TreeViewNodeLoad(ByVal sender As Object, ByVal e As String) Dim tn As TreeNode = CType(CType(sender, TreeView).GetNodeFromIndex(e), TreeNode) Dim text As String = tn.NodeData tn.Nodes.Clear() For Each fsi As String In Directory.GetDirectories(text) Dim myTreeNode As New TreeNode Dim getdir As New DirectoryInfo(fsi) myTreeNode.Text = getdir.Name myTreeNode.NodeData = fsi CType(sender, TreeView).GetNodeFromIndex(e).Nodes.Add(myTreeNode) If (getdir.GetDirectories.Length > 0) Then Dim myTreeNode1 As New TreeNode myTreeNode1.Text = "" CType(sender, TreeView).GetNodeFromIndex(e).Nodes(CType(sender, TreeView).GetNodeFromIndex(e).Nodes.IndexOf(myTreeNode)).Nodes.Add(myTreeNode1) End If Next End Sub你只需加入文件的显示即可
可以参考这个: using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.IO;namespace FolderBrowser { /// <summary> /// Summary description for Form1. /// </summary> public class FolderDialog : System.Windows.Forms.Form { private System.Windows.Forms.ImageList fileIconList; private System.Windows.Forms.TreeView FolderTree; private System.ComponentModel.IContainer components; public FolderDialog() { // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.components = new System.ComponentModel.Container(); System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(FolderDialog)); this.fileIconList = new System.Windows.Forms.ImageList(this.components); this.FolderTree = new System.Windows.Forms.TreeView(); this.SuspendLayout(); // // fileIconList // this.fileIconList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit; this.fileIconList.ImageSize = new System.Drawing.Size(16, 16); this.fileIconList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("fileIconList.ImageStream"))); this.fileIconList.TransparentColor = System.Drawing.Color.Transparent; // // FolderTree // this.FolderTree.Anchor = (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right); this.FolderTree.ImageList = this.fileIconList; this.FolderTree.Name = "FolderTree"; this.FolderTree.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { new System.Windows.Forms.TreeNode("我的电脑", 0, 0)}); this.FolderTree.Size = new System.Drawing.Size(470, 350); this.FolderTree.TabIndex = 0; this.FolderTree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.FolderTree_AfterSelect); // // FolderDialog // this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); this.ClientSize = new System.Drawing.Size(472, 353); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.FolderTree}); this.Name = "FolderDialog"; this.Text = "浏览我的电脑"; this.ResumeLayout(false); } #endregion /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.Run(new FolderDialog()); } private void FolderTree_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e) { if(e.Node.Text.ToString()!="我的电脑") EnumDirectories(e.Node); else EnumDrives(e.Node); } private void EnumDrives(TreeNode ParentNode) { if(ParentNode.Nodes.Count==0) { foreach(string drive in Directory.GetLogicalDrives()) { FolderTree.SelectedNode=ParentNode; TreeNode TempNode=new TreeNode(); TempNode.Text=drive.Substring(0,drive.Length-1); TempNode.Tag=drive; TempNode.ImageIndex=1; TempNode.SelectedImageIndex=1; FolderTree.SelectedNode.Nodes.Add(TempNode); FolderTree.SelectedNode.Nodes[FolderTree.SelectedNode.Nodes.Count-1].EnsureVisible(); } } } private void EnumDirectories(TreeNode ParentNode) { FolderTree.SelectedNode=ParentNode; string DirectoryPath=ParentNode.Tag.ToString(); if(ParentNode.Nodes.Count==0) { if(DirectoryPath.Substring(DirectoryPath.Length-1)!=@"\") DirectoryPath+=@"\"; try { foreach(string directory in Directory.GetDirectories(DirectoryPath)) { TreeNode TempNode=new TreeNode(); TempNode.Text=directory.Substring(directory.LastIndexOf(@"\")+1); TempNode.Tag=directory; TempNode.ImageIndex=3; TempNode.SelectedImageIndex=2; FolderTree.SelectedNode.Nodes.Add(TempNode); FolderTree.SelectedNode.Nodes[FolderTree.SelectedNode.Nodes.Count-1].EnsureVisible(); } } catch(Exception) { } } } } }
'在此处放置初始化页的用户代码
If Not IsPostBack Then
Dim getdir As New DirectoryInfo(Server.MapPath("/"))
For Each fsi As DirectoryInfo In getdir.GetDirectories
Dim fi As DirectoryInfo = CType(fsi, DirectoryInfo)
Dim myTreeNode As New TreeNode
myTreeNode.Text = fi.Name
myTreeNode.NodeData = fi.FullName
TreeView1.Nodes.Add(myTreeNode)
If (fi.GetDirectories.Length > 0) Then
Dim myTreeNode1 As New TreeNode
myTreeNode1.Text = ""
TreeView1.Nodes(TreeView1.Nodes.IndexOf(myTreeNode)).Nodes.Add(myTreeNode1)
End If
Next
End If
End SubPrivate Sub TreeView1_SelectedIndexChange(ByVal sender As Object, ByVal e As Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs) Handles TreeView1.SelectedIndexChange
TreeViewNodeLoad(TreeView1, e.NewNode)
End SubPrivate Sub TreeView1_Expand(ByVal sender As Object, ByVal e As Microsoft.Web.UI.WebControls.TreeViewClickEventArgs) Handles TreeView1.Expand
TreeViewNodeLoad(TreeView1, e.Node)
End SubPrivate Sub TreeViewNodeLoad(ByVal sender As Object, ByVal e As String)
Dim tn As TreeNode = CType(CType(sender, TreeView).GetNodeFromIndex(e), TreeNode)
Dim text As String = tn.NodeData
tn.Nodes.Clear()
For Each fsi As String In Directory.GetDirectories(text)
Dim myTreeNode As New TreeNode
Dim getdir As New DirectoryInfo(fsi)
myTreeNode.Text = getdir.Name
myTreeNode.NodeData = fsi
CType(sender, TreeView).GetNodeFromIndex(e).Nodes.Add(myTreeNode)
If (getdir.GetDirectories.Length > 0) Then
Dim myTreeNode1 As New TreeNode
myTreeNode1.Text = ""
CType(sender, TreeView).GetNodeFromIndex(e).Nodes(CType(sender, TreeView).GetNodeFromIndex(e).Nodes.IndexOf(myTreeNode)).Nodes.Add(myTreeNode1)
End If
Next
End Sub你只需加入文件的显示即可
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.IO;namespace FolderBrowser
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class FolderDialog : System.Windows.Forms.Form
{
private System.Windows.Forms.ImageList fileIconList;
private System.Windows.Forms.TreeView FolderTree;
private System.ComponentModel.IContainer components; public FolderDialog()
{
//
// Required for Windows Form Designer support
//
InitializeComponent(); //
// TODO: Add any constructor code after InitializeComponent call
//
} /// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
} #region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(FolderDialog));
this.fileIconList = new System.Windows.Forms.ImageList(this.components);
this.FolderTree = new System.Windows.Forms.TreeView();
this.SuspendLayout();
//
// fileIconList
//
this.fileIconList.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
this.fileIconList.ImageSize = new System.Drawing.Size(16, 16);
this.fileIconList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("fileIconList.ImageStream")));
this.fileIconList.TransparentColor = System.Drawing.Color.Transparent;
//
// FolderTree
//
this.FolderTree.Anchor = (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right);
this.FolderTree.ImageList = this.fileIconList;
this.FolderTree.Name = "FolderTree";
this.FolderTree.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
new System.Windows.Forms.TreeNode("我的电脑", 0, 0)});
this.FolderTree.Size = new System.Drawing.Size(470, 350);
this.FolderTree.TabIndex = 0;
this.FolderTree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.FolderTree_AfterSelect);
//
// FolderDialog
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(472, 353);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.FolderTree});
this.Name = "FolderDialog";
this.Text = "浏览我的电脑";
this.ResumeLayout(false); }
#endregion /// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new FolderDialog());
} private void FolderTree_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
if(e.Node.Text.ToString()!="我的电脑")
EnumDirectories(e.Node);
else
EnumDrives(e.Node);
} private void EnumDrives(TreeNode ParentNode)
{
if(ParentNode.Nodes.Count==0)
{
foreach(string drive in Directory.GetLogicalDrives())
{
FolderTree.SelectedNode=ParentNode;
TreeNode TempNode=new TreeNode();
TempNode.Text=drive.Substring(0,drive.Length-1);
TempNode.Tag=drive;
TempNode.ImageIndex=1;
TempNode.SelectedImageIndex=1;
FolderTree.SelectedNode.Nodes.Add(TempNode);
FolderTree.SelectedNode.Nodes[FolderTree.SelectedNode.Nodes.Count-1].EnsureVisible();
}
}
} private void EnumDirectories(TreeNode ParentNode)
{
FolderTree.SelectedNode=ParentNode;
string DirectoryPath=ParentNode.Tag.ToString();
if(ParentNode.Nodes.Count==0)
{
if(DirectoryPath.Substring(DirectoryPath.Length-1)!=@"\")
DirectoryPath+=@"\";
try
{
foreach(string directory in Directory.GetDirectories(DirectoryPath))
{
TreeNode TempNode=new TreeNode();
TempNode.Text=directory.Substring(directory.LastIndexOf(@"\")+1);
TempNode.Tag=directory;
TempNode.ImageIndex=3;
TempNode.SelectedImageIndex=2;
FolderTree.SelectedNode.Nodes.Add(TempNode);
FolderTree.SelectedNode.Nodes[FolderTree.SelectedNode.Nodes.Count-1].EnsureVisible();
}
}
catch(Exception)
{
}
}
}
}
}
我们假设您已经知道如何给TreeView添加节点,现在主要的难题是怎么取得目录与文件,在.NET中,类DirectoryInfo可以取得目录及其子目录(使用DirectoryInfo对象的GetDirectories()方法),而DirectoryInfo对象的GetFiles()方法可以得到FileInfo[],它就是一个目录下面的所有文件。
其实是一个遍历所有文件和目录的过程,最后你就可以得到硬盘中的所有文件/目录结构!