![]() |
Re: TreeView und ListView
Liest die Ordner aus:
Delphi-Quellcode:
Zeigt die entsprechenden Dateien an:
procedure TForm2.HoleVerzeichnisse(const Pfad: String; var Tree: TTreeView;
Start: TTreeNode); var SR: TSearchRec; begin if FindFirst(Pfad + '\*.*', faAnyFile, SR) = 0 then repeat Application.ProcessMessages; if (SR.Attr AND faDirectory = faDirectory) AND (SR.Name[1] <> '.') AND (SR.Name[1] <> '_') then begin baum := Tree.Items.Addchild(Start, SR.Name); baum.SelectedIndex := 1; baum.ImageIndex := 1; baum.StateIndex := -1; HoleVerzeichnisse(Pfad+'\'+ SR.Name, Tree, baum); end; until (FindNext(SR) <> 0); SysUtils.FindClose(SR); end;
Delphi-Quellcode:
procedure TForm2.HoleDateien(const Pfad: String; ListV: TListView; Filter: String);
var SR: TSearchRec; anItem:TListItem; begin if FindFirst(Pfad + '\' + Filter, faAnyFile, SR) = 0 then repeat Application.ProcessMessages; if (SR.Attr AND faDirectory <> 16) AND (SR.Name[1] <> '.') AND (SR.Name[1] <> '_') then begin anItem:=ListV.Items.Add; anItem.Caption:=SR.Name; anItem.SubItems.Add( IntToStr(GetFileSizeEx(Pfad+'\'+SR.Name)div 1024)); anItem.SubItems.Add( GetFileTypename(Pfad+'\'+SR.Name)); anItem.SubItems.Add( DateToStr(GetFileLastAccessTime(Pfad+'\'+SR.name))); anItem.SubItems.Add( DateToStr(GetCreationTimeOfFile(Pfad+'\'+SR.Name))); end; until (FindNext(SR) <> 0); SysUtils.FindClose(SR); end; |
Re: TreeView und ListView
Hm,
du musst auch noch auf
Delphi-Quellcode:
ueberpruefen!
( SR.Name[1] <> '..')
Und was soll das sein?
Delphi-Quellcode:
Du weist schon dass du das ganze einfacher in einer einzigen Funktion mit Rekursion schreiben kannst?
(SR.Name[1] <> '_')
|
Re: TreeView und ListView
Das
Delphi-Quellcode:
habe ich gemacht, weil der mir sonst auch _history Ordner anzeigt was ich aber nich haben möchte.
(SR.Name[1] <> '_')
Und
Delphi-Quellcode:
hab ich nicht gemacht da ich es ja schon mit einem Punkt habe. Wenn das erste Zeichen ungleich '.' ist schliesst es '..' ja logischerweise auch aus, da dies ja schon 2 Zeichen sind.
(SR.Name[1] <> '..')
Wie kann ich das denn in einer Funktion machen? Ich habe Stunden lang rumprobiert und es nicht hinbekommen. Danach habe ich mich dann für 2 Funktionen entschieden. Für eine Lösung in einer Funktion wäre ich sehr dankbar. Vorallem das mit der Rekursion wäre interessant, da ich somit dann auch Dateien aus SubOrdnern auslesen könnte. |
Re: TreeView und ListView
Siehe dir doch den Link in meinen ersten Beitrag (Beitrag #2) an. Da sind rekursive Funktionen zu finden, die du wenn, dann nur leicht anpassen musst.
|
Re: TreeView und ListView
Entweder hast du meinen Beitrag #16 total ignoriert oder ich sehe net wo das Problem liegt :?: Du musst einfach wenn es im Result um einen Ordner handelt in diesen Ordner reingehen und dort weitersuchen bis es keine weiteren Unterordner mehr gibt.
Hab dir hier mal ein kleines Beispiel was du mit etwas anpassen verwenden kannst (hab ich aus einem aktuellen Projekt rauskopiert) oder aber auch einfach umschreiben kannst um Delphi's TSearchRec zu nutzen!
Delphi-Quellcode:
procedure SearchFiles(aRoot: String; var Files : TStringList; Mask: String = '*.*'; Recursive : Boolean = False);
var wfd : TWin32FindData; hFile : THandle; begin aRoot := IncludeTrailingPathDelimiter(aRoot); if Recursive then begin hFile := FindFirstFile(PChar(aRoot + Mask), wfd); if ( hFile <> INVALID_HANDLE_VALUE ) then try repeat if ( wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY ) then begin if ( (String(wfd.cFileName) <> '.') and (String(wfd.cFileName) <> '..') ) then begin SearchFiles(aRoot + wfd.cFileName, Files, Mask, Recursive); // hier wird die Rekursion angewandt end; end; until FindNextFile(hFile, wfd) = False; finally Windows.FindClose(hFile); end; end; hFile := FindFirstFile(PChar(aRoot + Mask), wfd); if ( hFile <> INVALID_HANDLE_VALUE ) then try repeat if (wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY <> FILE_ATTRIBUTE_DIRECTORY ) then begin Files.Add(wfd.cFileName); end; until FindNextFile(hFile, wfd) = False; finally Windows.FindClose(hFile); end; end; |
Re: TreeView und ListView
Tut mir ja leid das ich das alles noch nicht sofort verstehe aber ich arbeite noch nicht so lange mit delphi.
Ich werde das morgen dann mal ausprobieren und meinen Erfolg hier posten! |
Re: TreeView und ListView
Moin Malte,
Zitat:
Delphi-Quellcode:
prüfen musst.
(SR.Name <> '.') and (SR.Name <> '..')
Eine Prüfung auf SR.Name[1] <> '.' ist schlichtweg falsch, da ein Datei-/Ordername durchaus mit einem Punkt beginnen kann. Nur weil man das im Explorer nicht so eingeben kann heisst noch lange nicht, dass es nicht geht, bzw. nicht erlaubt ist ;-) (ich weiss, dass man das oft so sieht, aber dadurch wird es nicht richtiger ;-)) |
Re: TreeView und ListView
Zitat:
Und klar sag ruhig wenn es geklappt hat oder ob du noch mehr Hilfe brauchst, dazu ist ja das Forum da! |
Re: TreeView und ListView
Entweder bin ich zu doof um die Funktion umzubauen oder die tut einfach nicht das was ich möchte.
Jetzt zeigt er mir im TreeView nichts mehr an und im ListView zeigt er mir ALLES an. also Ordner + unterordner + dateiname und dabei listet er die Ordner und Unterordner auch einzeln auf. z.B.: C:\ C:\Test C:\Test\test.txt Hat jemand ne Lösung? Hier meine umgebaute Funktion:
Delphi-Quellcode:
Ich vermute einfach mal das
procedure TForm2.FindAllFiles(FileList: TListView;
RootFolder: string; Mask: string ='*'; Recurse: Boolean = True; AddFolderNames: Boolean = False; IgnoreMaskAtFolderNames: Boolean = True); procedure LFindAllFiles(AParentFolder: String); var LSearchRec: TSearchRec; begin if FindFirst(AParentFolder + '*', faAnyFile, LSearchRec) = 0 then begin repeat if (LSearchRec.Name <> '.') and (LSearchRec.Name <> '..') then begin if LSearchRec.Attr and faDirectory = faDirectory then begin if AddFolderNames and (IgnoreMaskAtFolderNames or Like(AnsiLowerCase(LSearchRec.Name), Mask)) then FileList.AddItem(AParentFolder + LSearchRec.Name, TObject(True)); if Recurse then LFindAllFiles(AParentFolder + LSearchRec.Name + '\'); end else if Like(AnsiLowerCase(LSearchRec.Name), Mask) then FileList.AddItem(AParentFolder + LSearchRec.Name, TObject(False)); end; until FindNext(LSearchRec) <> 0; FindClose(LSearchRec); end; end; begin Mask := AnsiLowerCase(Mask); LFindAllFiles(IncludeTrailingPathDelimiter(RootFolder)); end;
Delphi-Quellcode:
auf keinen Fall so richtig ist. Aber wie komm ich an
FileList.AddItem(AParentFolder + LSearchRec.Name, TObject(True));
Delphi-Quellcode:
???
AddObject
|
Re: TreeView und ListView
Hab es endlich richtig hinbekommen. Danke für die Hilfe
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz