如何用treeview控件遍历显示硬盘中的文件和目录?

解决方案 »

  1.   

    下面的是前两天我用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你只需加入文件的显示即可
      

  2.   

    可以参考这个:
    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)
                    {
                    }
                }
            }
    }
    }
      

  3.   

    我觉得应该讲原理比较好,不要动不动就帖一大段代码,没有意思。
    我们假设您已经知道如何给TreeView添加节点,现在主要的难题是怎么取得目录与文件,在.NET中,类DirectoryInfo可以取得目录及其子目录(使用DirectoryInfo对象的GetDirectories()方法),而DirectoryInfo对象的GetFiles()方法可以得到FileInfo[],它就是一个目录下面的所有文件。
    其实是一个遍历所有文件和目录的过程,最后你就可以得到硬盘中的所有文件/目录结构!