[VB.NET]用.NET實作檔案總管

用.NET實作檔案總管

要用.NET實作檔案總管的功能,相信應該都難不倒大家。但我也相信應該很多人都是一次取得所有電腦內的檔案與目錄清單,一次的把清單給塞到介面上。如果你不是習慣這樣寫的人,那恭喜您可以跳過這篇了。如果恰巧你就是這樣寫的,請耐著性子往下看吧。

要實作檔案總管功能又要兼顧效率,我們在寫作時勢必不能一次把所有檔案目錄清單給塞到介面。取而代之的是,我們可以只塞下一層的目錄與檔案。範例程式碼如下:

Imports System.IO
 
Public Class Form1
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        InitTreeView()
    End Sub
 
    Private Sub InitTreeView()
        Dim node As TreeNode
        TreeView1.BeginUpdate()
        For Each driver As DriveInfo In DriveInfo.GetDrives()
            node = TreeView1.Nodes.Add(driver.Name)
            If driver.IsReady Then
                AddDirectorys(node)
                AddFiles(node)
                node.Tag = True
            End If
        Next
        TreeView1.EndUpdate()
    End Sub
 
    Private Sub AddDirectorys(ByVal node As TreeNode)
        If CBool(node.Tag) = True Then
            Return
        End If
 
        Try
            TreeView1.BeginUpdate()
            For Each dir As String In Directory.GetDirectories(node.FullPath)
                node.Nodes.Add(dir.Substring(dir.LastIndexOf("\") + 1))
            Next
        Catch ex As Exception
        Finally
            TreeView1.EndUpdate()
        End Try
 
    End Sub
 
    Private Sub AddFiles(ByVal node As TreeNode)
        If CBool(node.Tag) = True Then
            Return
        End If
 
        Try
            TreeView1.BeginUpdate()
            For Each file As String In Directory.GetFiles(node.FullPath)
                node.Nodes.Add(My.Computer.FileSystem.GetName(file))
            Next
        Catch ex As Exception
        Finally
            TreeView1.EndUpdate()
        End Try
    End Sub
 
    Private Sub TreeView1_BeforeExpand(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewCancelEventArgs) Handles TreeView1.BeforeExpand
        For Each node As TreeNode In e.Node.Nodes
            AddDirectorys(node)
        Next
        AddFiles(e.Node)
        e.Node.Tag = True
    End Sub
End Class

 

執行畫面

image image