Supportnet Computer
Planet of Tech

Supportnet / Forum / Anwendungen(Java,C++...)

Delphi: Filelistbox und Directorylistbox





Frage

Hallo! Ich lerne Delphi 7 gerade in der Schule und bin noch Anfänger, habe aber schon mit anderen Sprachen gearbeitet. Zu meinem Problem: Ich möchte ein Programm schreiben, das Ordner auf Dateien untersucht, die eine bestimmte, vorher festgelegte Dateigröße überschreiten und sie anzeigt und gegebenenfalls löscht. Das Programm besitzt schon die gewünschten Funktionen, aber eine Sache ist da noch ;) : Das Programm kann bis jetzt nur einzelne Ordner durchsuchen (directorylistbox1 gibt daten an filelistbox1 weiter und dann wird die filelistbox1 durchsucht). Ich möchte das jetzt so machen, das man einen Ordner in der directorylistbox1 anklickten kann, wodurch eine unsichtbare filelistbox erstellt wird. Danach sollen alle FileListBoxen durchsucht werden. Geht das überhaut? Oder gibt es bessere Lösungen? Mein Problem ist vielleicht auch nur das ich die Funktion, die die Dateigrößen überprüft, nicht verstehen (die hab ich im Internet gefunden). Sie ist für Filelistboxen zugeschnitten: [code] function GetFileSize(const szFile: String): Int64; var fFile: THandle; wfd: TWIN32FINDDATA; begin result := 0; if not FileExists(szFile) then exit; fFile := FindFirstfile(pchar(szFile),wfd); if fFile = INVALID_HANDLE_VALUE then exit; result := (wfd.nFileSizeHigh*(MAXDWORD))+wfd.nFileSizeLow; windows.FindClose(fFile); flsz := result; end;[/code] Ich führe die Funktion in einer FOR-Schleife aus. In dieser Schleife gehe ich jeden Eintrag in der Listbox durch, und fülle so meine Tabelle: [code] procedure TForm1.Button3Click(Sender: TObject); var i, zeile: integer; begin StringGrid1.RowCount := FileListBox1.Items.Count; zeile := 0; FOR i := 0 to (FileListBox1.Items.Count - 1) DO BEGIN //Größe jeder Datei berechnen getfilesize(FileListBox1.Items.Strings[i]); sleep(10); //Werte in Tabelle eintragen IF flsz > maxwert THEN BEGIN StringGrid1.Cells[0,zeile] := IntToStr(zeile+1); StringGrid1.Cells[1,zeile] := FileListBox1.Items.Strings[i]; StringGrid1.Cells[2,zeile] := IntToStr(flsz); //StringGrid1.Cells[4,zeile] := IntToStr(i+1); zeile := zeile + 1; END; END; //Tabellengrösse trimmen / Tabelle anzeigen StringGrid1.RowCount := zeile; StringGrid1.Visible := true; Label2.Caption := IntToStr(zeile); end;[/code] Wie kann ich denn jetzt mehrere Ordner auf eimal durchsuchen? Bitte helft mir!! Danke ;)

Antwort 1 von TeRealWhistler

Hi,

Du fragts wie?

Rekursiv.
Iterativ geht auch aber ist umständlicher.

Also wenn du feststellst, dass ein Eintrag in der FileListBox das Verzeichniss-Attribut hat, sprich ein Ordner ist, muss du rekursiv den unterordner ebenfalls durchsuchen u.s.w..
Wenn das implementiert ist kannst du in deiner DirectoryListBox einen Start-Ordner auswählen und alle seine Datien und alle seine Unterordner mit samt ihren Dateien bearbeiten.

Oder habe ich deine Frage nicht ganz richtig verstanden????

Ciao

Andreas

Antwort 2 von b.ray

Doch, doch...
Ich mach das jetzt mit FindFirst, FindNext und FindClose. Mit einer Schleife suche ich die sozusagen tiefste Ebene und gebe das Verzeichniss an meine filelistbox weiter. dann wird dieser pfad gespeichert, damit er nicht erneut aufgerufen wird.

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: