利用 C++Builder 的 VCL 組件 TTreeView 搭配 TImageList,可快速建立類似總管的目錄樹介面。關鍵在於取得磁碟機代碼、判斷磁碟類型,並以遞迴方式列舉子目錄與檔案。
GetAllDrive()(內部封裝 GetLogicalDriveStrings)並配合 GetDriveType 判別類型(可移動、固定、網路、光碟、RAM 碟)。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);
}
}
BrowseDirectory 遞迴填充。OnExpanding 事件)動態讀取該層級子目錄,並預先加入佔位節點以顯示「+」號。文中提供三種完整實作範例,開發者可根據專案規模選擇適當策略。