![]() |
Prüfen, ob man in ein Verzeichnis schreiben kann
Hallo DPler :hi:
ich möchte herausfinden, ob ich in einem Verzeichnis schreiben kann(Es dreht sich um eine Datei mit Programmoptionen). Möglichkeiten sind mir da genau drei eingefallen: Möglichkeit a)
Delphi-Quellcode:
Einfach ne Datei erstellen und gucken, obs geklappt hat.
function TOptions.CanWrite(ADir: string): Boolean;
var F: File; FileName: string; begin FileName := IncludeTrailingBackslash(ADir) + 'TestFile_' + DateTimeToStr(Now); // Unwahrscheinlich, dass so ne Datei schon existiert try AssignFile(F, FileName); try Rewrite(F); // einfach mal erstellen finally CloseFile(F); end; if FileExists(FileName) then // hat das Erstellen geklappt? begin DeleteFile(PChar(FileName)); // Datei wird ja nicht mehr gebraucht Result := True; end else begin Result := False; end; except Result := False; // Fehler bein Erstellen end; end; Vorteil: - Leicht zu implementieren :wink: Nachteil: - Sieht irgendwie unprofessionell aus :( Möglichleit b) - Auf OS prüfen --> wenn Win9x: erstmal true --> wenn WinNT+: Schreibrechte prüfen - Dann auf Datenträger prüfen: CD: false, HD: true Vorteil: - sieht professioneller aus :wink: Nachteile: - Viel Quelltext - Wer weiß, ob ich nicht irgendwas vergessen hab oder sich was mit Vista, WinXP SP3, ... ändert? Möglichkeit c) - Auf Dateisystem prüfen: --> FAT: true --> NTFS: Schreibrechte prüfen --> CDFS: false Vorteil: - sieht professioneller aus :wink: Nachteile: - Viel Quelltext - Was, wenn WinFS(kommt IIRC mit Vista SP1 oder? :gruebel:) kommt? - Wer weiß, ob ich nicht irgendwas vergessen hab oder sich was mit Vista, WinXP SP3, ... ändert? Was würdet ihr machen? a) b) c) oder doch vielleicht Möglichkeit d), die wunderbar funktioniert, keine von-hinten-durch-die-Brust-ins-Auge-Funktion ist und mir nur nicht einfallen will... :wall: mfg Christian |
Re: Prüfen, ob man in ein Verzeichnis schreiben kann
Guckst du hier:
![]() |
Re: Prüfen, ob man in ein Verzeichnis schreiben kann
Hallo,
Ich wuerde Moeglichkeit 1) nehmen. Denn du muestest auch ueberpruefen, ob die Datei nicht exklusiv von einem anderen Programm geoeffnet ist, ob genuegend Speicherplatz vorhanden ist etc. Siehe auch ![]() |
Re: Prüfen, ob man in ein Verzeichnis schreiben kann
@Luckie:
ähm... kenn ich schon. Wäre Variabte b) und c) @toms: Sollen Programmeinstellungen sein. Also ist es unwahrscheinlich, dass die Datei schon exklusiv geöffnet ist. Auch bei zu wenig Speicherplatz hat man IMHO andere Sorgen, als ein Prog, das nun mal seine Einstellungen nicht speichern kann... Wenn du aber meinst Möglichkeit a) wär einfacher(mein ich auch :wink:), werd ich wahrscheinlich die nehmen. Oder hat das noch andere Nachteile? mfg Christian |
Re: Prüfen, ob man in ein Verzeichnis schreiben kann
Zu Variante A: vorher prüfen ob die Datei schon existiert und eventuell einen anderen Namen wählen.
Aber was ist, wenn du zwar die Rechte zum erstellen der Datei hast und nicht zum löschen, dann bleibt die Datei ja in dem Ordner und mit der Zeit sammeln die sich mit der Zeit an. PS: siehe da ![]() |
Re: Prüfen, ob man in ein Verzeichnis schreiben kann
Zitat:
Zitat:
Zitat:
mfg Christian |
Re: Prüfen, ob man in ein Verzeichnis schreiben kann
Nee, man kann die Rechte explizit vergeben, also Erstellen, Lesen, Schreiben, Bearbeiten, Löschen und so.
So kann man z.B. eine Datei erstellen/schreiben lassen, aber dennoch verbieten vorhandene Dateien zu löschen, oder zu verändern (unabhängig vom Besitzer). Das mi der Schon vorhandene Datei ... es brauchen ja z.B. nur 2 Programme in der selben Sekunde sowas zu versuchen und schon beeinflussen die sich selber. PS: hast du den Code mit DateTimeToStr schonmal probiert, oder ist der nur so zusammengebaut? Weil im deutschen ja als Trennzeichen für die Uhrzeit ein ":" drin ist und sowas ist im Dateinamen nicht erlaubt. Drum hab ich mir ja 'nen anderen Zeitwert (GetTickCount) als Haxadezimal genommen (Buchstaben und Zahlen sind ja erlaubt) und da ich mir die Datei nur erstellen lasse, wenn es sie noch nicht giebt (CREATE_NEW) und es danach mit einen aanderem Namen versuche, kann auch keine Datei überschrieben werden ^^ Es ist also wirklich am esten die Rechte direkt abzufragen (z.B. ala Luckie) und danach könnte man, wenn man wirklich gaaaanz sichergehn will, das man wirklich die nötigen Rechte hat, immernoch eine Datei erstellen und es so testen (aber nur wenn der erste Test meinte man habe die Rechte dazu) ._. |
Re: Prüfen, ob man in ein Verzeichnis schreiben kann
Zitat:
Zitat:
Zitat:
mfg Christian |
Re: Prüfen, ob man in ein Verzeichnis schreiben kann
Zitat:
Eine Try..Except (Holzhammer Methode) genuegt doch vollends alles andere ist IMO unnoetig und zuviel Aufwand. |
Re: Prüfen, ob man in ein Verzeichnis schreiben kann
Zitat:
Bei CreateFile braucht man kein Try-Except, denn wenn es nicht geht, dann gibt diese Funktion INVALITE_FILEHANDLE (oder wie dat nochmals hieß) zurück und erzeigt keine Exception :zwinker: Und warum nicht gleich der Holzhammer ... ließ weider oben nochmal nach ... da steht mindestens einer der vielen Gründe, welche dagegen sprechen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 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 by Thomas Breitkreuz