![]() |
GetFolderSize
Hi ihr lieben
Habe ein Problem: Ich schreibe mit meinem Programm auf eine DVD-RAM. In meinem Programm kann ich eine "maxsize" angeben. Soll heißen, das der Ordner in dem ich schreibe nicht größer als X werden darf. Das bedeutet das ich vor jedem Kopiervorgang prüfe, wie viel Platz ich noch zur Verfügung habe. Das passiert mit folgendem Code:
Delphi-Quellcode:
Das Problem ist, das ich eine "maxsize" von 4GB habe und die Abfrage, wie viel Platz noch zur Verfügung steht ziemlich lange dauert :/
function getFolderSize(FolderName: string): Int64;
var fldr, fso: OleVariant; begin fso := CreateOleObject('Scripting.FileSystemObject'); fldr := fso.GetFolder(FolderName); result := fldr.size; end; Hat jemand einen Tipp wie ich das beschleunigen kann? Danke im Voruas |
AW: GetFolderSize
Wäre es nicht günstiger, die Gesamtgröße aller zu schreibenden Dateien und die der evtl. bereits vorhandenden einmalig zu ermitteln? Wenn die Summe der beiden größer als die Maximalgröße ist, kann man ja gleich eine Meldung ausgeben oder etwas in der Art.
|
AW: GetFolderSize
Das wäre natürlich das beste, das Problem dabei ist, das laufend neue Dateien kommen, welche exportiert werden sollen. Soll heißen, das ich mir aus einer Datenbank auslese ob es neue Sachen gibt, wenn ja lese ich mir die neuen Werte ein und arbeite sie nacheinander ab. Ist ein "Auftrag" erledigt setze ich in der Datenbank eine Art "archived" flag und lese wieder ob es etwas neues gibt.
somit weiß ich eigentlich nie wie viel ich jetzt zu tun habe. Kann sein das mein Programm stundenlang Arbeitslos ist oder auch dauerhaft weg sichert. |
AW: GetFolderSize
Musst du unbesingt über Scripting.FileSystemObject gehen?
FindFirst und Co. gibt es ja auch. Eventuell kann man da auch eine Verzeichnisüberwachung aktivieren. - einmal die Größe bestimmen (sich auch gleich mal alles in einer Liste merken) - und dann bei einer Änderungsmeldung nur die geänderten Dateien zur alten Gesamtsumme dazurechnen/abziehen |
AW: GetFolderSize
OK, aber es müsste doch trotzdem genügen, den noch verfügbaren Speicherplatz einmalig (bei Programmstart z.B.) zu ermitteln. Kommt eine neue Datei, wird deren Größe ermittelt. Ist diese kleiner als die Differenz zwischen aktuellem und Maximalwert, wird sie gesichert und der aktuelle Wert entsprechend erhöht. Das dürfte um Einiges performanter sein, als bei jeder Datei erst die komplette Ordnergröße ermitteln zu lassen.
|
AW: GetFolderSize
Zitat:
Code:
(Ja ich weiß da kann ein ganzes Cluster Verschnitt bei sein, aber bisher war ich damit auf der sicheren Seite)
Größe=GrößeinByte div ClusterGrößeMedium + 1
Gruß K-H |
AW: GetFolderSize
Stimmt, aber mir ging es jetzt eher ums Prinzip.
|
AW: GetFolderSize
Fehlt da nicht noch ein Mal, oder soll Größe wirklich die Clusteranzahl angeben?
Delphi-Quellcode:
Nja, und dann noch der Offset für das Dateisystem.
Größe = ((GrößeinByte - 1) div ClusterGrößeMedium + 1) * ClusterGrößeMedium; // Und schon ist der Verschnitt weg (runtergerechnet)
Größe = (GrößeinByte + ClusterGrößeMedium - 1) div ClusterGrößeMedium * ClusterGrößeMedium; // es lässt sich auch hochzu rechnen Größe = Ceil(GrößeinByte / ClusterGrößeMedium) * ClusterGrößeMedium; // oder direkt mit Aufrunden und mit Bitoperationen lässt es auch noch recht nett lösen (beim Zweiten das Mal und Durch gegen ein Und getauscht) |
AW: GetFolderSize
Zitat:
K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz