Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Datei in Benutzung -> Sperren (https://www.delphipraxis.net/136288-datei-benutzung-sperren.html)

MCXSC 27. Jun 2009 00:39


Datei in Benutzung -> Sperren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

jeder kennt es wahrscheinlich: Man versucht eine Datei zu löschen, und merkt (dank umfangreicher Dialogboxen), dass die Datei bereits aktuell in Benutzung ist und daher (temporär) "gesperrt" wurde.

Ich habe Google schon masakriert, aber die Dame ist heute wohl etwas zickig... Jemand hier eine Idee, wie man so etwas bewerkstelligen kann?

Hafe vun,
MCXSC

Luckie 27. Jun 2009 00:56

Re: Datei in Benutzung -> Sperren
 
Öffne die Datei exklusiv.

Fridolin Walther 27. Jun 2009 00:57

Re: Datei in Benutzung -> Sperren
 
MSDN-Library durchsuchenCreateFile ... die Absätze über die Share Modes sind für Dich interessant. Ebenfalls interessant: MSDN-Library durchsuchenLockFile.

Luckie geht wohl auch niemals schlafen :(.

MCXSC 27. Jun 2009 01:02

Re: Datei in Benutzung -> Sperren
 
Zitat:

Zitat von Fridolin Walther
MSDN-Library durchsuchenCreateFile ... die Absätze über die Share Modes sind für Dich interessant. Ebenfalls interessant: MSDN-Library durchsuchenLockFile.

Super danke! Wenigstens hab ich jetzt was, wonach ich suchen kann. :)

Zitat:

Zitat von Fridolin Walther
Luckie geht wohl auch niemals schlafen :(.

Du doch scheinbar auch nicht.^^

Luckie 27. Jun 2009 01:04

Re: Datei in Benutzung -> Sperren
 
Luckie hat Urlaub und das wird ausgenutzt, da wird die Nacht zum Tag. ;)

MCXSC 27. Jun 2009 01:11

Re: Datei in Benutzung -> Sperren
 
Zitat:

Zitat von Luckie
Luckie hat Urlaub und das wird ausgenutzt, da wird die Nacht zum Tag. ;)

Kenn ich irgendwo her... :D

Ich habe nun zwei Möglichkeiten gefunden: Einmal mit einem gewissen OpenFile und einmal mit LockFileEx/UnlockFileEx. Sollte man eines davon bevorzugen?

//Edit: Okay, habe mir nun mal etwas "zusammengebastelt":

Delphi-Quellcode:
//zum sperren
var
  lf_FileSize: Integer;
  lf_FileHandle: THandle;
begin
  lf_FileHandle := CreateFile(PChar(Datei), GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  lf_FileSize:= GetFileSize(lf_FileHandle, nil);
  LockFile(lf_FileHandle, 0, 0, lf_FileSize, 0);
  CloseHandle(lf_FileHandle);
end

//zum entsperren
var
  lf_FileSize: Integer;
  lf_FileHandle: THandle;
begin
  lf_FileHandle := CreateFile(PChar(Datei), GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  lf_FileSize:= GetFileSize(lf_FileHandle, nil);
  UnlockFile(lf_FileHandle, 0, 0, lf_FileSize, 0);
  CloseHandle(lf_FileHandle);
end;
Und dabei bekomme ich (zumindest bis zum sperren kommt er :D) die Fehlermeldung "Systemfehler. Code: 6. Das Handle ist ungültig."

JanW 27. Jun 2009 06:38

Re: Datei in Benutzung -> Sperren
 
Also bei mir geht dein Code. Probier doch mal ne andere Datei zu sperren.
Hab zwar fpc/lazarus aber das runft ja auch nur die <winAPI auf

Gruß,
Jan

MCXSC 27. Jun 2009 13:29

Re: Datei in Benutzung -> Sperren
 
Zitat:

Zitat von JanW
Also bei mir geht dein Code. Probier doch mal ne andere Datei zu sperren.
Hab zwar fpc/lazarus aber das runft ja auch nur die <winAPI auf

Ah, okay. War wohl etwas spät die Nacht (vergessen, vorher die Variable Datei zu "füllen"). ^^

himitsu 27. Jun 2009 14:33

Re: Datei in Benutzung -> Sperren
 
Zitat:

Zitat von MCXSC
Und dabei bekomme ich (zumindest bis zum sperren kommt er :D) die Fehlermeldung "Systemfehler. Code: 6. Das Handle ist ungültig."

Vielleicht solltest du es dir nochmal genau durchlesen?
MSDN-Library durchsuchenLockFile

Damit kann man nur, wärend die Datei geöffnet ist, einen "Teil" oder Alles einer Datei sperren.

Delphi-Quellcode:
var
  lf_FileSize: Integer;
  lf_FileHandle: THandle;
begin
  lf_FileHandle := CreateFile(PChar(Datei), GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  lf_FileSize:= GetFileSize(lf_FileHandle, nil);
  LockFile(lf_FileHandle, 0, 0, lf_FileSize, 0);
  ...
  UnlockFile(lf_FileHandle, 0, 0, lf_FileSize, 0);
  CloseHandle(lf_FileHandle);
end;

MCXSC 27. Jun 2009 14:43

Re: Datei in Benutzung -> Sperren
 
Zitat:

Zitat von himitsu
Damit kann man nur, wärend die Datei geöffnet ist, einen "Teil" oder Alles einer Datei sperren.

Habe doch schon geschrieben, dass es klappt. Die Variable "Datei" war bei mir nur leer, was zu dem Fehler geführt hat...


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:46 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz