| Autor |
Beitrag |
Wolle92
      
Beiträge: 1296
Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
|
Verfasst: Mo 29.10.07 16:31
Hallo,
meine Funktion um die Größe aller Dateien in einem Ordner auszugeben funktioniert nicht...
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
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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 
      
Beiträge: 1296
Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
|
Verfasst: Mo 29.10.07 17:40
hat jetzt geklappt, hab einfach sr.size genommen...
|
|
kkausp
      
Beiträge: 77
Erhaltene Danke: 1
W2K, WIN XP, WIN XPe; WIN7
(D1;D2;D5;) D6 Ent.; D2009 Ent.
|
Verfasst: 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
      
Beiträge: 593
Erhaltene Danke: 5
Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
|
Verfasst: Mo 29.10.07 18:38
Titel: Re: Integer ist zu klein
kkausp 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
---
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 Narses: Beiträge zusammengefasst.
|
|
kkausp
      
Beiträge: 77
Erhaltene Danke: 1
W2K, WIN XP, WIN XPe; WIN7
(D1;D2;D5;) D6 Ent.; D2009 Ent.
|
Verfasst: Mo 29.10.07 19:03
Entschuldigung: Richtig es muss int64 statt integer sein.
|
|
Wolle92 
      
Beiträge: 1296
Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
|
Verfasst: 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  )
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
      
Beiträge: 77
Erhaltene Danke: 1
W2K, WIN XP, WIN XPe; WIN7
(D1;D2;D5;) D6 Ent.; D2009 Ent.
|
Verfasst: 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
      
Beiträge: 1340
Erhaltene Danke: 120
Win 10
RIO, CE, Lazarus
|
Verfasst: 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.
Delphi-Quelltext 1: 2: 3: 4:
| AssignFile(f, folder + '\' + sr.Name); Reset(f); 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 
      
Beiträge: 1296
Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
|
Verfasst: Mo 29.10.07 20:15
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 29.10.07 22:07
|
|