Entwickler-Ecke

Windows API - Verwendete speicher platz von einem dir


Sauger Chris - Sa 29.12.07 15:30
Titel: Verwendete speicher platz von einem dir
moin

meine frage wie kann ich den verwendeten speicher platz von einem dir (c:\logs\) heraus finden

ps. möglichst schnell und einfach :)


danke für eure hilfe


Tilo - Sa 29.12.07 16:47

Einfach: Alle Datei(auch die in den Unterordner) ermitteln und deren Größe addieren.
Schlagwörter:
FindFirst, FindNext


Sauger Chris - Sa 29.12.07 17:44

habs mal so gemacht

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:
function GetFolderSize(folder: String): Integer;
var sr: TSearchRec;
    r, size: int64;
    f: File;
begin
  size := 0;
  r := FindFirst(folder + '\*.*', faAnyFile, sr);
  while (r = 0do
  begin
    if copy(sr.name, 11) <> '.' then
    begin
      if ((sr.Attr and faDirectory) <> 0)then
        size := size + GetFolderSize(folder + '\' + sr.name)
      else
      begin
        AssignFile(f, folder + '\' + sr.Name);
        Reset(f);
        size := size + FileSize(f);
        CloseFile(f);
      end;
    end;
    Application.ProcessMessages;
    r := FindNext(sr);
  end;
  FindClose(sr);
  result := size;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text := inttostr(GetFolderSize('c:\ant\')*100);
end;



ps. is aber glaub ich nicht so genau und dauert ne weile kann man das irgend wie schneller machen ??


Yogu - Sa 29.12.07 17:54

Du könntest dich bei den Windows-Shell-Funktionen bedienen. Vielleicht gibt es da eine Methode, die das für dich erledigt. Aber schneller geht die dann auch nur, weil sie auf Assembler basiert, was du mit viel Aufwand auch so hinbekommen könntest.


DrRzf - Sa 29.12.07 18:24

Assembler muss ncit schneller sein als Delphi Code.
Und in dem fall kommts auch eher auf die Festplattengeschwindigkeit an, der Prozzi wartet sich hier sowiso nen Wolf bis die Pladde die daten bereitstellt.


Yogu - Sa 29.12.07 18:57

Aber die Shell benutzt diese Chache-Informationen, was heißt, dass jeder Ordner nur einmal abgefragt werden muss. Wenn er schonmal ermittelt wurde, geht das ganze dann rucki-zucki. Aber stimmt schon, ASM bringt hier wohl wenig.