Entwickler-Ecke

Dateizugriff - Dateien und Ordner zählen


TOMahawk85 - Mo 15.05.06 17:29
Titel: Dateien und Ordner zählen
Hallo liebe Forumfreunde,

der Titel mag den einen oder anderen Nerven, aber mein Problem diesbezüglich konnte noch nicht ganz gelöst werden (auch mit der Suche nicht).

Wie ich die Dateien/Ordner in einer Listbox oder einem Memo speichern kann ist auch mir inzwischen gelungen. Aber ich brauche die Dateien nicht in einer Listbox o.ä., sondern will nur die Anzahl der Dateien/Ordner wissen.

Ich habe versucht bei den Programmausschnitten mit Listbox/Memo eine Variable fürs zählen einzubauen, allerdings liefert die mir absurd hohe Werte.

Wie man nun hoffentlich sieht unterscheidet sich meine Frage leicht von den Antworten, die andere schon erhalten haben.

Ich bin für jede Hilfe überaus dankbar,
TOMahawk85

P.S. Der Idealfall wäre, wenn jede Datei (nicht Ordner) mit dazugehöriger Größe in Byte nebeneinander in einem Feld gespeichert wird + eine Zählervariable für die Anzahl.


Hansi@OMG - Di 16.05.06 08:17

Wie wärs dann mit dieser Lösung:

Delphi-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:
//Aus der Delphi-Library um rekursiv nach Dateien zu suchen
procedure GetFilesInDirectory(ADirectory: string; AMask: String; AList: TStrings; ARekursiv: Boolean);
var
  SR: TSearchRec;
begin
  if (ADirectory<>''and (ADirectory[length(ADirectory)]<>'\'then
    ADirectory:=ADirectory+'\';

  if (FindFirst(ADirectory+AMask,faAnyFile-faDirectory,SR)=0then begin
    repeat
      if (SR.Name<>'.'and (SR.Name<>'..'and (SR.Attr<>faDirectory) then
          AList.Add(ADirectory+SR.Name)
    until FindNext(SR)<>0;
    FindClose(SR);
  end;

  if ARekursiv then
    if (FindFirst(ADirectory+'*.*',faDirectory,SR)=0then
    begin
      repeat
        if (SR.Name<>'.'and (SR.Name<>'..'then
          GetFilesInDirectory(ADirectory+SR.Name,AMask,AList,True);
      until FindNext(SR)<>0;
      FindClose(SR);
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var templist : Tstringlist;
begin
templist:=tstringlist.create;
GetFilesInDirectory('C:\test\','*.*',templist,False);
showmessage(inttostr(templist.Count));
templist.free;
end;

Du lädst dir die Dateien nicht in eine Listbox oder in ein Memo, sondern nur in eine temporäre Stringlist und lässt dir dann einfach ausgeben, wie viele Einträge in der Liste sind.


ZeitGeist87 - Di 16.05.06 08:27

Hab grad mal schnell n Beispiel zamgeschustert

Hoffe ist das was du suchst

Quelltext ist eigentlich dokumentiert =)

lg
Stefan


TOMahawk85 - Di 16.05.06 14:13
Titel: Ich mag gute und schnelle Antworten
Vielen Dank,

ich hab mich ja erst gestern hier im Forum angemeldet und bin überaus positiv überrascht, wie gut die Hilfe hier ausfällt. Gestern hat eine Antwort gerade mal 7 Minuten gedauert und heute bekomme ich sogar ein fertiges Programm.
Dafür gebührt größter Respekt.

Ich werde auf jeden Fall beide Varianten probieren und möchte mich noch mal bedanken, dass so schnell kompetente Antworten kamen.

Hoffe man liest voneinander,
TOMahawk85