Autor Beitrag
Wolle92
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1296

Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
BeitragVerfasst: Mo 29.10.07 16:31 
Hallo,
meine Funktion um die Größe aller Dateien in einem Ordner auszugeben funktioniert nicht...
ausblenden 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:
function TForm1.GetFolderSize(folder: String): Integer;
var sr: TSearchRec;
    r, size: Integer;
    f: File;
begin
  size := 0;
  r := FindFirst(folder + '\*.*', faAnyFile, sr);
  while (r = 0) do
  begin
    if copy(sr.name, 1, 1) <> '.' 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;

Kommt immer ein total anderes Ergebnis raus...
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 29.10.07 17:07 
Moin!

Schau dir mal diesen Fred an, damit solltest du weiter kommen. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Wolle92 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1296

Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
BeitragVerfasst: Mo 29.10.07 17:40 
hat jetzt geklappt, hab einfach sr.size genommen...
kkausp
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77
Erhaltene Danke: 1

W2K, WIN XP, WIN XPe; WIN7
(D1;D2;D5;) D6 Ent.; D2009 Ent.
BeitragVerfasst: Mo 29.10.07 17:48 
Titel: Integer ist zu klein
Du musst noch die integer-typen in z.B. longint wechseln, sonst erlebst Du bei 2GB eine böse Überraschung ;-)
dummzeuch
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 593
Erhaltene Danke: 5


Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
BeitragVerfasst: Mo 29.10.07 18:38 
Titel: Re: Integer ist zu klein
user profile iconkkausp hat folgendes geschrieben:
Du musst noch die integer-typen in z.B. longint wechseln, sonst erlebst Du bei 2GB eine böse Überraschung ;-)


?? longint = integer (seit Delphi 2)

twm

---

ausblenden Delphi-Quelltext
1:
2:
3:
4:
  r := FindFirst(folder + '\*.*', faAnyFile, sr);
  while (r = 0) do
  begin
    if copy(sr.name, 1, 1) <> '.' then


Und was ist mit der Datei '.hallo' ?

twm

Moderiert von user profile iconNarses: Beiträge zusammengefasst.
kkausp
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77
Erhaltene Danke: 1

W2K, WIN XP, WIN XPe; WIN7
(D1;D2;D5;) D6 Ent.; D2009 Ent.
BeitragVerfasst: Mo 29.10.07 19:03 
Entschuldigung: Richtig es muss int64 statt integer sein.
Wolle92 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1296

Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
BeitragVerfasst: Mo 29.10.07 19:07 
Ja, das ist sowieso noch nicht ganz ausgereift, aber da es eigentlich zum einfachen kopieren von Dateien von CDs gedacht ist, die ja nur 700 MB aufnehmen können... der Rest fällt runter.. ;) (Dann stellt man nen Bierglas runter, und schon hat man ein Bit :D)

Da es sich, zumindest bei dieser Version des Programms, um ein Programm zum Kopieren von Bildern handelt, braucht man keine Dateien mit einem . am Anfang zu bedenken...
kkausp
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 77
Erhaltene Danke: 1

W2K, WIN XP, WIN XPe; WIN7
(D1;D2;D5;) D6 Ent.; D2009 Ent.
BeitragVerfasst: Mo 29.10.07 19:28 
Das schlimmste in der späteren Fehlersuche (in 10 Jahren ;-) ), sind fehlerhafte Funktionen (zum damaligen Zeitpunkt kein Überlauf), die Du schon jahrelang ohne Probleme verwendest.
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1340
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mo 29.10.07 19:59 
Du hast jetzt zwar schon eine Lösung, und zwar eine bessere als die fehlerhafte von vorher je hätte werden können. Aber du sollst wenigstens noch erfahren woher dein Fehler gekommen ist.
Dieser beruht auf einem bescheidenen übrigbleibsel aus der Pascal Zeit.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
        AssignFile(f, folder + '\' + sr.Name);
        Reset(f); // <--- da ist der fehler!
        size := size + FileSize(f);
        CloseFile(f);

Reset hat normalerweise zwei Parameter. Wobei der zweite, wenn nicht angegeben, immer 128 ist. Dieser stellt die Recordgröße dar mit der standartmäßig gelesen wird wenn du zum lesen einer untypisierten Datei Read verwendest. Also muss da dein Puffer dann 128 Byte groß sein.
Das interesannte ist jedoch, das dir mit Filesize nicht die Größe der Datei in Bytes geliefert wird, sondern die Anzahl der Records die sich in der Datei befinden. Also ist die Größe die du dann immer bekommst die Dateigröße in Bytes DIV 128.
Willst du das Problem abstellen musst du als zweiten Parameter 1 übergeben.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Wolle92 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1296

Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
BeitragVerfasst: Mo 29.10.07 20:15 
Danke euch allen...
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 29.10.07 22:07 
Dazu noch eine interessante Lektüre: blogs.msdn.com/oldne...04/12/28/336219.aspx