ERLEDIGT
JA
JA
ANTWORTEN
10
10
ZUGRIFFE
2351
2351
EMPFEHLEN
-
Hallo, habe mal wieder eine Frage:
Ich möchte gern von einen bestimmten Ordner alle Dateien in einer ListBox auflisten.
Wie ist das realisierbar?
Vielen Dank schonmal!
-
Moin,
also ich würd zunächst mal alle Dateinamen in dem Verzeichnis einlesen (meinetwegen in ner Liste zwischenspeichern, wenn du sie nachher noch brauchst) und dann schön der Reihe nach in die ListBox einfügen.
mfgnoch 'n bischen Werbung in eigener Sache: www.ice-only.de
-
Das ist mir klar, nur WIE alle einlesen?
-
Ja, dann sag doch das du wissen möchtest, wie man Dateien einliest

Also ich hab mal ne Funktion geschrieben, mit der man Verzeichnisse einlesen kann. Das ging ungefähr so:Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14
String root = "c:"; WIN32_FIND_DATA flData; HANDLE hFind = FindFirstFile((root+"\\"+"*").c_str(), &flData); BOOL bOK = hFind != INVALID_HANDLE_VALUE; while (bOK){ if(flData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){ if(flData.cFileName[0] != '.'){ ListBox1->AddItem(flData.cFileName, 0); } } bOK = FindNextFile(hFind, &flData); }
Wenn du das FILE_ATTRIBUTE_DIRECTORY änderst (dazu Google:"WIN32_FIND_DATA") müsste es eigentlich möglich sein, nur Dateien aus zu lesen.
mfgnoch 'n bischen Werbung in eigener Sache: www.ice-only.de
-
18.11.08 10:36 #5
- Registriert seit
- Mar 2004
- Beiträge
- 441
Von http://www.swissdelphicenter.ch/de/showcode.php?id=1725:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
procedure ListFileDir(Path: string; FileList: TStrings); var SR: TSearchRec; begin if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then begin repeat if (SR.Attr <> faDirectory) then begin FileList.Add(SR.Name); end; until FindNext(SR) <> 0; FindClose(SR); end; end; procedure TForm1.Button1Click(Sender: TObject); begin ListFileDir('C:\WINDOWS\', ListBox1.Items); end;
Der CBuilder und Delphi basieren beide auf der VCL, von daher ist der Code problemlos nach C++ VCL portierbar, da alle Objekte (z.B. TSearchRec) auch in C++ verwendbar sind.
Das Ergebnis sieht dann so aus:
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
void __fastcall TForm1::ListFileDir(String Path, TStrings* FileList) { TSearchRec SR; if (FindFirst(Path + "*.*", faAnyFile, SR) == 0) { do { if(SR.Attr != faDirectory) { FileList->Add(SR.Name); } } while(FindNext(SR) == 0); } } void __fastcall TForm1::Button1Click(TObject *Sender) { ListFileDir("C:\\WINDOWS\\", ListBox1->Items); }
Zu Delphi gibt es eine Vielzahl von Tips, Tricks und Tutorials, die sich in fast allen Fällen auch auf C++ VCL übertragen lassen, von daher kann ich dir das SwissDelphiCenter sehr ans Herz legen.
-
Wo ist denn ListFileDir?
Finde es einfach nicht...
Gibt es das nicht in meiner Version (6)?
Was kann ich sonst dazu nehmen?
-
ListFileDir ist eine Funktion, die Du dir selbst schreibst.

Das hier ist quasi deren Inhalt
Die FileList kannst du nachher einfach in die ListBox adden, wenn mich nicht alles täuscht. Theoretisch brauchst du dafür auch keine Funktion zu schreiben. Aber das würde sich natürlich anbieten, wenn du die Funktion öfter benutzen willst.Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
String Path = "c:\\windows"; TStrings* FileList = new FileList(); TSearchRec SR; if (FindFirst(Path + "*.*", faAnyFile, SR) == 0) { do { if(SR.Attr != faDirectory) { FileList->Add(SR.Name); } } while(FindNext(SR) == 0); }
mfgnoch 'n bischen Werbung in eigener Sache: www.ice-only.de
-
19.11.08 08:30 #8
- Registriert seit
- Mar 2004
- Beiträge
- 441
@Supa:
Hrgn... da zuckt gleich mein Augenlid, wenn ich ein new ohne entsprechendes delete sehe...
@-H-T-P-:
Supa hat recht. In deinen Header mußt du natürlich noch die entsprechenden Funktionsprototypen mit aufnehmen.
-
Ich weiß, stell mich ziemlich blöd
.
Trotzdem, wenn ich den Code oben (von Supa) unverändert einfüge kommt bei mir folgendes:
Bei: TStrings* FileList = new FileList();
Error: [C++ Error] Unit1.cpp(14): E2303 Type name expected
[C++ Error] Unit1.cpp(14): E2034 Cannot convert 'int *' to 'TStrings *'
[C++ Error] Unit1.cpp(14): E2141 Declaration syntax error
Bei: if (FindFirst(Path + "*.*", faAnyFile, SR) == 0)
Error: [C++ Error] Unit1.cpp(18): E2040 Declaration terminated incorrectly
-
Also erstmal hab ich bestimmt schon 2 Jahre nicht mehr mit dem BCB programmiert. Und mittlerweile auch nicht mehr in C/C++. Darum vergebt mir meine grobe Fahrlässigkeit

Und Sorry, TStrings * FileList mit new FileList()
zu initialisieren is natürlich auch totaler Bullshit. FileList ist natürlich nur der Variablenname. Da waren die Finger wieder schneller als der Kopf -.-
Okay, hier noch mal eine komplette Funktion, die euer beider Zufriedenheit sicherstellen sollte:Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
String Path = "c:\\windows\\"; TStringList* FileList = new TStringList(); TSearchRec SR; if (FindFirst(Path + "*.*", faAnyFile, SR) == 0) { do { if(SR.Attr != faDirectory) { FileList->Add(SR.Name); } } while(FindNext(SR) == 0); } ListBox1->Items->AddStrings(FileList); delete FileList;
Implementiert und getestet.
mfgnoch 'n bischen Werbung in eigener Sache: www.ice-only.de
-
Danke. Werde es mal gleich testen.
Edit:
Super! Funktioniert einwandfrei!
Geändert von -H-T-P- (20.11.08 um 18:09 Uhr)
Ähnliche Themen
-
Dateien auflisten
Von bernimoses im Forum Visual Basic 6.0Antworten: 4Letzter Beitrag: 11.09.08, 19:26 -
Ordner und Dateien auflisten
Von marcap im Forum JavaAntworten: 3Letzter Beitrag: 24.12.07, 13:24 -
Auflisten von Dateien
Von RealHAZZARD im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 5Letzter Beitrag: 11.10.05, 09:53 -
URL/URI - Dateien auflisten?
Von moson im Forum .NET ArchivAntworten: 0Letzter Beitrag: 08.12.04, 17:27 -
Dateien in Liste auflisten
Von daredevil im Forum Visual Basic 6.0Antworten: 5Letzter Beitrag: 08.08.03, 20:28





Zitieren
Login






