![]() |
Dateigröße ermitteln, während die Datei ausgeführt wird???
Hallo!
folgende Funktion benutze ich, wenn ich Größe einer Datei auf der Fesplatte ermitteln möchte:
Delphi-Quellcode:
Leider hängt die Funktion, wenn die zu prüfende EXE-Datei gerade läuft. Liegt sicher an AssignFile, weil die Datei bereits "besetzt" ist. Gibt es eine alternative Funktion, die mein Problem löst?
function CheckFileSize(aFilename: string): integer;
var f: file of Byte; size: Longint; begin AssignFile(f, aFilename); Reset(f); try size := FileSize(f); finally CloseFile(f); end; Result := size; end; |
Re: Dateigröße ermitteln, während die Datei ausgeführt wird?
So gehts ohne Angrabbeln der Datei mit WinAPI:
Delphi-Quellcode:
Bis denn,
Function WinFilesize(afile: string): integer;
Var tmpW32FD : WIN32_FIND_DATA; FindHandle : THandle; Begin FindHandle := FindFirstFile(PCHAR(afile), tmpW32FD); If FindHandle <> INVALID_HANDLE_VALUE Then Begin Result := (tmpW32FD.nFileSizeHigh Shl 32) + tmpW32FD.nFileSizeLow; FindClose(FindHandle); End Else Result := 0; End; Karl-Heinz [edit=Luckie]Wir haben hier Delphi-Tags. ;) Mfg, Luckie[/edit] |
Re: Dateigröße ermitteln, während die Datei ausgeführt wird?
Oder noch einfacher:
Delphi-Quellcode:
Die Fileopen-Attribute entscheiden über das Gelingen der Datei, falls schon geöffnet:
function myfilesize(afile: string): integer;
var FileHandle: THandle; begin FileHandle := FileOpen(FFileName, fmOpenRead or fmShareDenyWrite); result := -1; // Fehler if FileHandle <> 0 then try result := GetFileSize(FileHandle, nil); finally CloseHandle(FileHandle); end; end; fmOpenRead or fmShareDenyWrite sollte gehen, guck nochmal in die Hilfe zu den verschiedenen Attributen. Grüßle, Karl-Heinz [edit=Luckie]Das nöächste mal setzt bitte die Delphi-Tags selber! Mfg, Luckie[/edit] |
Re: Dateigröße ermitteln, während die Datei ausgeführt wird?
Und wenn du es doch mit AssignFile machen willst, setzte vorher den FileMode:
Zitat:
|
Re: Dateigröße ermitteln, während die Datei ausgeführt wird?
Hallo nochmal,
ich bin etwas unsicher geworden :-) Ich nutze eine ähnliche Funktion selbst in einer Bibliothek immer wieder und habe nochmal nachgeguckt. Ich habe es damals nicht mit der Windows-Api gemacht, sondern mit TFileStream:
Delphi-Quellcode:
fmShareDenyNone ist wichtig.
function FSize(fname: String): int64;
var t : tfilestream; begin result := - 1; try t := tfilestream.create(fname,fmopenread or fmShareDenyNone); result := t.size; t.free; except exit; end; end; Karl-Heinz Krönig |
Re: Dateigröße ermitteln, während die Datei ausgeführt wird?
Danke! Habe FileMode gesetzt, klappt wieder :-)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 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