Tree control und CFileFind
-
ich habe ein Tree Control und möchte darin die ordnerstruktur ab einem unterordner wiedergeben wobei jeder Ordner ein ("Root-Element") und jede datei ein ("Child-Element") darstellen soll.
Ich weiss zwar wie man mit CFileFind umgeht aber bisher habe ich immer nur ein Verzeichnis wiedergegeben.
Aber ich habe keinen Plan wie ich das jetzt Verschachteln muss?
-
Ich habe keine Ahnung wie man ein CTreeCtrl benutzt, aber wie du die Dateien und Unterodner und all das Zeugs bekommst ist relativ einfach.
CFileFind FileFinder; CString strFind; BOOL BFind; CStringArray FolderArray; FolderArray.Add(_T("Irgendein Pfad zu einem Grundverzeichnis")); while(FolderArray.GetCount() > 0) { strFind = m_FolderArray.GetAt(0); strFind += _T("\\*.*"); BFind = FileFinder.FindFile(strFind); while(BFind) { BFind = FileFinder.FindNextFile(); if(FileFinder.IsDirectory()) { if(!FileFinder.IsDots()) { FolderArray.Add(FileFinder.GetFilePath); // Ordner sonst noch wo speicher für das CTreeCtrl; } } else { // Das File speichern für das CTreeCtrl; } } FolderArray.RemoveAt(0); }Hoffe das kann dir ein wenig weiterhelfen. Man kann das natürlich auch anderst lösen, denn so gibt es ein wenig ein Durcheinander, was das Suchergebnis betrifft.
Grüssli
-
na beim CTreeCtrl hat man das problem das man sich merken muss wo man ist hoffe folgender Codeschnipsel zeigt das Problem
HTREEITEM iroot= NULL, iroot2= NULL; iroot= m_cTreeIndex.InsertItem("Root 1"); m_cTreeIndex.InsertItem("child 1.1", iroot); iroot2= m_cTreeIndex.InsertItem("Root 2", iroot); m_cTreeIndex.InsertItem("child 2.1", iroot2); m_cTreeIndex.InsertItem("child 2.2", iroot2); m_cTreeIndex.InsertItem("child 2.3", iroot2); m_cTreeIndex.InsertItem("chield 1.2", iroot);Irgendwie muss man sich ja dann die ganze zeit merken wo man ist.
-
Wo ist da ein Problem?
CTreeCtrl ctrlTree; // Das CTreeCtrl Objekt. CFileFind FileFinder; CString strFind; HTREEITEM hTreeItem; BOOL BFind; CStringArray FolderArray; CArray<HTREEITEM, HTREEITEM> TreeItemArray; FolderArray.Add(_T("Irgendein Pfad zu einem Grundverzeichnis")); TreeItemArray.Add(ctrlTree.InsertAt(FolgerArray.GetAt(0))); while(FolderArray.GetCount() > 0) { strFind = m_FolderArray.GetAt(0); strFind += _T("\\*.*"); BFind = FileFinder.FindFile(strFind); hTreeItem = TreeItemArray.GetAt(0); while(BFind) { BFind = FileFinder.FindNextFile(); if(FileFinder.IsDirectory()) { if(!FileFinder.IsDots()) { FolderArray.Add(FileFinder.GetFilePath()); TreeItemArray.Add(ctrlTree.InsertAt(FileFinder.GetFileTitle(), hTreeItem)); } } else { ctrlTree.InsertAt(FileFinder.GetFileName(), hTreeItem); } } FolderArray.RemoveAt(0); TreeItemArray.RemoveAt(0); }Der Code ist nicht getestet und ich habe nur die Angaben aus der MSDN und von dir, aber so in etwa sollte es doch gehen. Nicht?
Grüssli