Entwickler-Ecke
Dateizugriff - Wie kann ich Dateien eines Ordners herausfinden
webmaker - Mo 26.08.02 21:25
Titel: Wie kann ich Dateien eines Ordners herausfinden
HAllo Leute,
Ich hab da mal ne Frage und zwar wie kann ich alle Datein bzw. auch nur einige in eine TStringlist schreiben, sodass ich sie später z.b. in eine Listbox oder so packen kann???
Millo - Mo 26.08.02 21:41
Moin
Für solche fälle kann man eigentlich ganz gut die FileListBox und die DirectoryListbox Komponenten der Registrierkarte Win 3.1 verwenden.
Renegade - Mo 26.08.02 21:43
@Millo
kommt immer darauf an, ob der user darauf einfluß haben soll oder nicht. :)
Gruß Renegade
Millo - Di 27.08.02 12:38
@Renegade
:oops: Hast wohl recht.
@webmaker
Sonst gibt es auch noch Komponenten wie ShellListView und ShellTreeView.
Der Code für einen solchen zugriff ist ungefähr immer gleich.
mit diesem hier kann kriegst du alle Markierten Dateien( Er zeigt alle Selectierten Einträge der ShellListView in der ListBox an):
Quelltext
1: 2: 3: 4: 5:
| for x:=0 to ShellListView1.Items.Count-1 do begin if ShellListView1.Items.Item[x].Selected then ListBox1.Items.Add(ShellListView1.Folders[x].DisplayName); end; |
Für den Namen:
Quelltext
1:
| ShellListView1.Folders[x].DisplayName; |
webmaker - Di 27.08.02 15:15
Danke, das mit der Faq habe ich leider nicht gesehen.
Dennoch habe ich zwei Fragen und zwar sagt er bei FindClose, dass es incompatible Typen: Cardinal und TSearchRec seien. Vorher habe ich diesen Code in einem leeren Formular gehabt, stoppte er nicht.
Wenn ich findclose rausnehme funktioniert es trotzdem noch.
2. Wenn ich in einen Ordner gehe, in dem noch weitere Ordner sind, so zeigt er die auch in der Listbox an
QuellCode:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| Procedure FindFiles (aPath, aFindMask: String; aWithSub: Boolean; aResult: tStrings); Var FindRec5: tSearchRec; Begin // Wenn die Stringliste nil ist oder aPath oder aFind nicht angegeben ist // dann raus If (aPath = '') or (aFindMask = '') or Not Assigned (aResult) Then Exit;
// Wenn am Ende der Pfadangabe noch kein \ steht, dieses hinzufügen If aPath[Length (aPath)] <> '\' Then aPath := aPath + '\';
// Im aktuellen Verzeichnis nach der Datei suchen If FindFirst (aPath + aFindMask, faAnyFile, FindRec5) = 0 Then Repeat If (FindRec5.Name <> '.') and (FindRec5.Name <> '..') Then // ...Ergebnis in die Stringlist einfügen // aResult.Clear; aResult.Add (FindRec5.Name); Until FindNext (FindRec5) <> 0; // FindClose(FindRec5);
// Wenn nicht in Unterverzeichnissen gesucht werden soll dann raus If Not aWithSub Then Exit;
// In Unterverzeichnissen weiter suchen If FindFirst (aPath + '*.*', faAnyFile, FindRec5) = 0 Then Repeat If (FindRec5.Name <> '.') and (FindRec5.Name <> '..') Then // Feststellen, ob es sich um ein Verzeichnis handelt If Boolean (FindRec5.Attr and faDirectory) Then // Funktion erneut aufrufen, um Verzeichnis zu durchsuchen (Rekursion) FindFiles (aPath + FindRec5.Name, aFindMask, aWithSub, aResult); Until FindNext (FindRec5) <> 0;
// FindClose (FindRec5); End;
procedure TFrameForm.ShellTreeView1DblClick(Sender: TObject); begin browserlistbox.Clear; FindFiles (ShellTreeView1.Path, '*.*', False, browserlistbox.Items); end; |
Delete - Di 27.08.02 15:57
webmaker hat folgendes geschrieben: |
Danke, das mit der Faq habe ich leider nicht gesehen. |
Man sollte solche Quellen immer vorher zu Rate ziehen. :wink:
Zitat: |
... und zwar sagt er bei FindClose, dass es incompatible Typen: Cardinal und TSearchRec seien. |
Bei dir kommen sich die Units "Windows" und "SysUtils" in die Quere. In beiden stecken Routinen zum Suchen der Dateien. Beim Suchen selbst passiert nichts, da die Namen unterschiedlich sind. Nur "FindClose" ist in beiden Fällen identisch. Du solltest deshalb
vor die "FindClose"-Zeilen setzen. (Den Punkt nicht vergessen!)
Zitat: |
Wenn ich findclose rausnehme funktioniert es trotzdem noch. |
Das ist aber ein Fehler, und das solltest du ganz schnell wieder rückgängig machen.
webmaker - Di 27.08.02 16:14
Ist klar das FindClos drin sein muss. Jetzt klappt es auch. Danke
Nur das er die Verzeichnisse mit in der Lsitbox auflistet ist doof, wie kriege ich die weg????
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!