首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++Builder 遞迴遍歷目錄樹並填充 TreeView 組件

     編輯:關於C++

利用 C++Builder 的 VCL 組件 TTreeView 搭配 TImageList,可快速建立類似總管的目錄樹介面。關鍵在於取得磁碟機代碼、判斷磁碟類型,並以遞迴方式列舉子目錄與檔案。

關鍵步驟與程式碼

  1. 取得磁碟機清單: 使用 GetAllDrive()(內部封裝 GetLogicalDriveStrings)並配合 GetDriveType 判別類型(可移動、固定、網路、光碟、RAM 碟)。
  2. 遞迴列舉函數 BrowseDirectory:
    void __fastcall TForm1::BrowseDirectory(AnsiString Dir, TTreeNode* Node) {
        TSearchRec sr;
        if (FindFirst(Dir + "*.*", faDirectory, sr) == 0) {
            do {
                if ((sr.Attr & faDirectory) && sr.Name != "." && sr.Name != "..") {
                    TTreeNode* SubNode = DirTree->Items->AddChild(Node, sr.Name);
                    BrowseDirectory(Dir + sr.Name + "\\", SubNode); // 遞迴
                }
            } while (FindNext(sr) == 0);
            FindClose(sr);
        }
        // 列舉檔案(可選)
        if (FindFirst(Dir + "*.*", faAnyFile, sr) == 0) {
            do {
                if (!(sr.Attr & faDirectory))
                    DirTree->Items->AddChild(Node, "檔案:" + sr.Name);
            } while (FindNext(sr) == 0);
            FindClose(sr);
        }
    }
    
  3. 初始化樹狀圖: 對每個有效磁碟機根目錄建立根節點,呼叫 BrowseDirectory 遞迴填充。

效能考量與改進方向

  • 一次性遞迴整顆樹在大型磁碟上耗時極長,且記憶體佔用高。
  • 改用 虛擬模式 / 延遲載入:僅在節點展開時(OnExpanding 事件)動態讀取該層級子目錄,並預先加入佔位節點以顯示「+」號。
  • 第三種折衷方案:展開時載入「下兩層」子目錄,兼顧響應速度與「+」號顯示正確性。

文中提供三種完整實作範例,開發者可根據專案規模選擇適當策略。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved