![]() |
Überprüfen, ob Dateien/Verzeichnisse gerade benutzt werden
Sind Dateien beispielsweise exklusiv geöffnet, lassen sich diese zum Beispiel nicht umbenennen oder löschen.
Folgende Sourcen ermöglichen das Abfragen, ob eine Datei/ ein Ordner in Verwendung sind. Der Source wurde von sh17 ![]()
Delphi-Quellcode:
Und dieser wurde von Delphi-Freak
function IsFileInUse(const FileName: String): Boolean;
var HFileRes : HFILE; begin Result := false; if not FileExists(FileName) then exit; HFileRes := CreateFile(PChar(FileName), GENERIC_READ, 0, nil, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, 0); Result := (HFileRes = INVALID_HANDLE_VALUE); if not Result then CloseHandle(HFileRes); end; ![]()
Delphi-Quellcode:
function IsDirInUse(const FileName: String): Boolean;
var HFileRes: HFILE; begin Result := False; if not DirectoryExists(FileName) then Exit; HFileRes := CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_BACKUP_SEMANTICS, 0); Result := (HFileRes = INVALID_HANDLE_VALUE); if not Result then CloseHandle(HFileRes); end; himitsu stellt noch zwei weitere Möglichkeiten vor, mit denen man noch "ein paar Prozessortakte einsparen" kann:
Delphi-Quellcode:
// PChar > Pointer = kein Aufruf von System.LStrToPChar
function IsFileInUse(const FileName: String): Boolean; var h: THandle; begin h := CreateFile(Pointer(FileName), GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0); Result := h = INVALID_HANDLE_VALUE; CloseHandle(h); end; // und hier noch die letzten 4-5 Prozessortackte gesparrt function IsFileInUse(const FileName: String): Boolean; asm push ebx push 0 push 0 push OPEN_EXISTING push 0{nil} push 0 push GENERIC_READ push &FileName call CreateFile cmp eax, INVALID_HANDLE_VALUE setz bl push eax call CloseHandle mov al, bl // al = &Result pop ebx end; [edit=fkerber]Neuen Code eingefügt. Mfg, fkerber[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17: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-2025 by Thomas Breitkreuz