![]() |
Re: Prüfen, ob man in ein Verzeichnis schreiben kann
Hab jetzt wieder etwas Zeit gefunden und bin mittlerweile so "weit":
Delphi-Quellcode:
(Bisher noch ungetestet)
function CanCreateFile(const ADir: string): Boolean;
var i, i2: Integer; i2: Integer; FileName: string; Found: Boolean; F: THandle; begin FileName := IncludeTrailingBackslash(ADir) + 'TestFile'; i := GetTickCount; i2 := i; Found := False; // eindeutigen Dateinamen ermitteln: repeat if i - i2 > 10000 then raise Exception.Create('Temporäre Datei konnte nicht erstellt werden.'); FileName := FileName + IntToHex(i, 8); if not FileExists(FileName) then Found := True; Inc(i); until Found; // Datei erstellen und automatisch löschen lassen: F := CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_ALWAYS, FILE_ATTRIBUTE_TEMPORARY or FILE_ATTRIBUTE_NOT_CONTENT_INDEXED or FILE_FLAG_DELETE_ON_CLOSE or FILE_FLAG_RANDOM_ACCESS, 0); Result := (F <> INVALID_HANDLE_VALUE); CloseHandle(F); end; Hab dann noch weitere Überlegungen angestellt: Wenn ich jetzt noch zusätzlich Schreibrechte abfragen will, kommt es zu folgenden Problemen: - Bei Win9x gibts keine Rechte - Bei FAT-Dateisystemen IMHO auch nicht - Auf ner CD auch nicht - Schreibgeschützte Disketten und USB-Sticks gehören ebenfalls dazu Wie nun das Problem lösen? :gruebel: Überlegt hab ich mir folgendes(Pseudocode):
Delphi-Quellcode:
Was sehen wir also:
function TOptions.CanWrite(const ADir: string): Boolean;
begin if IsNT then begin if IsNTFS then begin if CheckUserRights then begin Result := CanCreateFile(ADir); end else begin Result := False; end; end else begin Result := CanCreateFiel(ADir); end; end else begin Result := CanCreateFile(ADir); end; end; - sehr viel Aufwand - Es wird eh in (fast) jedem Fall CanCreateFile aufgerufen - sieht irgendwie auch...ähm... umständlich bis sinnlos aus - was, wenn WinFS kommt? Andere Methode(Pseudocode):
Delphi-Quellcode:
Was sehen wir also:
function TOptions.CanWrite(const ADir: string): Boolean;
begin if IsNT and IsNTFS then begin if CheckUserRights then begin Result := True; end else begin Result := False; end; end else begin if IsCD then begin Result := False; end else if IsReadOnlyDevice then begin Result := False; end else begin Result := True; end; end; end; - noch mehr Aufwand - kein CanCreateFile-Aufruf mehr - sieht irgendwie auch...ähm... umständlich aus - was, wenn WinFS kommt? - kann ich mir sicher sein, dass ich nix vergessen hab? Mir scheint also die Holzhammermethode doch angebrachter zu sein... :wall: Oder hab ich irgendwas übersehen? Mach ichs komplizierter, als es ist? was meint ihr? mfg Christian |
Re: Prüfen, ob man in ein Verzeichnis schreiben kann
Zitat:
Mal ehrlich: Wer hier im Forum ueberprueft vor dem Speichern die Rechte (ala IsCD, CheckUserRights etc) bevor z.B in eine Ini-Datei gespeichert wird? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:52 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