AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schreibzugriff Datei prüfen

Ein Thema von zeras · begonnen am 21. Jun 2020 · letzter Beitrag vom 23. Jun 2020
Antwort Antwort
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.643 Beiträge
 
Delphi 12 Athens
 
#1

Schreibzugriff Datei prüfen

  Alt 21. Jun 2020, 09:03
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 FileIsReadOnly , wenn "nur" der Pfad schreibgschützt ist? Oder muss ich eine andere Funktion nutzen?
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Schreibzugriff Datei prüfen

  Alt 21. Jun 2020, 09:31
garnicht.

Diese Funktion prüft keine Rechte, sondern nur das Schreibschutz-Attribut und die Auswertung dieses Attributets muß das Programm selbst machen.
Delphi-Referenz durchsuchenfaReadOnly, bzw.https://docs.microsoft.com/en-us/win...bute-constants
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).
$2B or not $2B

Geändert von himitsu (21. Jun 2020 um 09:36 Uhr)
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.643 Beiträge
 
Delphi 12 Athens
 
#3

AW: Schreibzugriff Datei prüfen

  Alt 23. Jun 2020, 19:11
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?
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.175 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Schreibzugriff Datei prüfen

  Alt 23. Jun 2020, 19:20
Ich vermute die Meldung kommt beim:
  FS := TFile.Create(fName); Folgendes fängt die Fehlermeldung ab:
Delphi-Quellcode:
Try
  FS := TFile.Create(fName);
Except
  // mach hier was du willst
End;
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Schreibzugriff Datei prüfen

  Alt 23. Jun 2020, 19:56
Zitat:
Delphi-Quellcode:
  FS := TFile.Create(fName);
  try
    result := true;
  finally
    FS.Free;
  end;
  if TFile.Exists(fName) then begin
    TFile.Delete(fName);
  end;
Exists ist sinnlos, denn wenn es ging, dann existiert die Datei und wenn Create nicht ging, dann kommt das Programm garnicht bis da hin.


Zitat:
Folgendes fängt die Fehlermeldung ab:
Da drin aber auf Keinen Fall auf FS zugreifen, denn der Variable wurde ja nichts zugewiesen.

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:
try
  fName := TPath.Combine(ExtractFilePath(fDir), 'test.tmp');
  TFile.WriteAllText(Name, '');
  TFile.Delete(fName);
  Result := True;
except
  Result := False;
end;
Direkt mit der WinAPI ist's hier aber "schöner", da man dann die Exceptions nicht hat, sondern nur schön stille Result-Werte.
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;
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.623 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Schreibzugriff Datei prüfen

  Alt 23. Jun 2020, 20:12
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).
Thomas Mueller
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.643 Beiträge
 
Delphi 12 Athens
 
#7

AW: Schreibzugriff Datei prüfen

  Alt 23. Jun 2020, 20:48
Danke für den Schnipsel.


Direkt mit der WinAPI ist's hier aber "schöner", da man dann die Exceptions nicht hat, sondern nur schön stille Result-Werte.
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;
Ich habe die Zeilen übernommen, musste aber trotzdem die Datei mittels Deletefile löschen, da sie trotzdem angelegt wurde.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: Schreibzugriff Datei prüfen

  Alt 23. Jun 2020, 21:52
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.

Nja, ansonsten einfach die 0 da rein und da Delete dekommentieren.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:08 Uhr.
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