AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Prüfen, ob man in ein Verzeichnis schreiben kann
Thema durchsuchen
Ansicht
Themen-Optionen

Prüfen, ob man in ein Verzeichnis schreiben kann

Ein Thema von r2c2 · begonnen am 30. Mär 2006 · letzter Beitrag vom 6. Apr 2006
Antwort Antwort
Seite 2 von 2     12   
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#11

Re: Prüfen, ob man in ein Verzeichnis schreiben kann

  Alt 6. Apr 2006, 20:25
Hab jetzt wieder etwas Zeit gefunden und bin mittlerweile so "weit":
Delphi-Quellcode:
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;
(Bisher noch ungetestet)

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?

Überlegt hab ich mir folgendes(Pseudocode):
Delphi-Quellcode:
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;
Was sehen wir also:
- 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:
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;
Was sehen wir also:
- 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...

Oder hab ich irgendwas übersehen? Mach ichs komplizierter, als es ist? was meint ihr?

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#12

Re: Prüfen, ob man in ein Verzeichnis schreiben kann

  Alt 6. Apr 2006, 20:44
Zitat:
Mir scheint also die Holzhammermethode doch angebrachter zu sein...
Ist sie auch.
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?
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 08:47 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