![]() |
Schreibzugriff Datei prüfen
Guten Morgen,
wir haben ein Programm in einem Pfad auf dem Netz liegen. Dort gehören auch einige Ini Dateien dazu, die im selben Pfad liegen. Nun soll nicht jeder die Ini Dateien ändern können. Deshalb hat der Pfad nur für einige Mitarbeiter Schreibrechte. Wie kann ich im Programm abfangen, dass dort nur die Admins schreiben dürfen? Geht das auch mit
Delphi-Quellcode:
, wenn "nur" der Pfad schreibgschützt ist? Oder muss ich eine andere Funktion nutzen?
FileIsReadOnly
|
AW: Schreibzugriff Datei prüfen
garnicht.
Diese Funktion prüft keine Rechte, sondern nur das Schreibschutz-Attribut und die Auswertung dieses Attributets muß das Programm selbst machen. ![]() ![]() Heißt, wenn du in die Datei schreiben willst und vorher nicht FileIsReadOnly prüfst, dann wird dennoch geschrieben. (so lange die Rechte ausreichen) Umständliche Lösung: SecurityDescroptoren der Datei/Verrzeichnisse auswerten. Einfache Lösung: Einfach versuchen zum Schreiben zu öffnen, wenn es nicht geht, dann fehlt das Recht (oder die Datei ist bereits geöffnet). |
AW: Schreibzugriff Datei prüfen
Jetzt habe ich folgendes eingebaut:
Delphi-Quellcode:
Function FolderWritable(fDir: String): Boolean;
var fName : String; FS : TFileStream; begin result := false; fName := IncludeTrailingPathDelimiter(ExtractFilePath(fDir)) + 'test.tmp'; FS := TFile.Create(fName); try result := true; finally FS.Free; end; if TFile.Exists(fName) then begin TFile.Delete(fName); end; end; Bei den Kollegen, die keinen Schreibzugriff haben, kommt dann folgende Meldung: Datei "L:\xxx\test.tmp" kann nicht erstellt werden. Zugriff verweigert. Diese Meldung wollte ich eigentlich vermeiden. Wie kann ich das tun? |
AW: Schreibzugriff Datei prüfen
Ich vermute die Meldung kommt beim:
Delphi-Quellcode:
Folgendes fängt die Fehlermeldung ab:
FS := TFile.Create(fName);
Delphi-Quellcode:
:stupid:
Try
FS := TFile.Create(fName); Except // mach hier was du willst End; |
AW: Schreibzugriff Datei prüfen
Zitat:
Zitat:
Delphi-Quellcode:
try
fName := TPath.Combine(ExtractFilePath(fDir), 'test.tmp'); FS := TFile.Create(fName); try Result := True; finally FS.Free; TFile.Delete(fName); end; except Result := False; end;
Delphi-Quellcode:
Direkt mit der WinAPI ist's hier aber "schöner", da man dann die Exceptions nicht hat, sondern nur schön stille Result-Werte.
try
fName := TPath.Combine(ExtractFilePath(fDir), 'test.tmp'); TFile.WriteAllText(Name, ''); TFile.Delete(fName); Result := True; except Result := False; end;
Delphi-Quellcode:
fName := TPath.Combine(ExtractFilePath(fDir), 'test.tmp');
H := CreateFile(PChar(fName), GENERIC_WRITE, 0, nil, {CREATE_ALWAYS} CREATE_NEW, {0} FILE_ATTRIBUTE_TEMPORARY, 0); CloseHandle(H); //DeleteFile(PChar(fName)); // nicht nötig, da FILE_ATTRIBUTE_TEMPORARY, womit Windows die Datei automatisch löscht Result := H <> INVALID_HANDLE_VALUE; |
AW: Schreibzugriff Datei prüfen
Wenn die Datei immer gleich heißt, muss Du noch berücksichtigen, dass theoretisch mehrere gleichzeitig versuchen darauf zuzugreifen (sowohl für die INI-Datei als auch für die Test-Datei).
|
AW: Schreibzugriff Datei prüfen
Danke für den Schnipsel.
Zitat:
|
AW: Schreibzugriff Datei prüfen
Hmmm ... gut, im Vorrang soll es das Caching steuern, aber bei meiner letzten Verwendung war die Datei nach Freigabe des letzten Dateihandles verschwunden.
OK, ist schon paar Jahre her und vielleicht haben die was geändert, oder sie ist erst beim nächsten Neustart weg, oder es liegt am Verzeichnis wo die liegt. :oops: Nja, ansonsten einfach die 0 da rein und da Delete dekommentieren. :D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:23 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