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 1 von 2  1 2      
r2c2

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

Prüfen, ob man in ein Verzeichnis schreiben kann

  Alt 30. Mär 2006, 12:23
Hallo DPler
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:
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;
Einfach ne Datei erstellen und gucken, obs geklappt hat.

Vorteil:
- Leicht zu implementieren

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

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

Nachteile:
- Viel Quelltext
- Was, wenn WinFS(kommt IIRC mit Vista SP1 oder? ) 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...

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

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

  Alt 30. Mär 2006, 12:33
Guckst du hier: http://www.michael-puff.de/Developer...ileAccess.html
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

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

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

  Alt 30. Mär 2006, 12:38
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 http://tinyurl.com/eaqq8
Thomas
  Mit Zitat antworten Zitat
r2c2

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

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

  Alt 30. Mär 2006, 12:46
@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 ), werd ich wahrscheinlich die nehmen.

Oder hat das noch andere Nachteile?

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

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

  Alt 30. Mär 2006, 18:28
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 http://www.delphipraxis.net/internal...=522098#522098 ... einfach nur'n anderes Verzeichnis verwenden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
r2c2

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

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

  Alt 30. Mär 2006, 19:28
Zitat von himitsu:
Zu Variante A: vorher prüfen ob die Datei schon existiert und eventuell einen anderen Namen wählen.
Is zwar sehr unwahrscheinlich, dass ne Datei existiert, die das aktuelle Datum samt Uhrzeit am Ende hat, aber von mir aus, kann ich das auch noch testen...

Zitat:
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.
Geht das? Ich dachte, wenn man Dateien erstellen kann, is man automatisch "Besitzer" der Datei und kann sie deshalb auch wieder löschen; oder hab ich da was falsch verstenaden?

Zitat:
PS: siehe da http://www.delphipraxis.net/internal...=522098#522098 ... einfach nur'n anderes Verzeichnis verwenden.
Guck ich mir mal an. Danke!

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

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

  Alt 31. Mär 2006, 09:43
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) ._.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
r2c2

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

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

  Alt 2. Apr 2006, 13:43
Zitat von himitsu:
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.
Gut. Is n Argument...

Zitat:
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.
Hm... hast Recht! Hab das nur mal so runtergetippt. War ja noch auf der Suche nach der besten Möglichkeit...

Zitat:
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) ._.
Gut, werds mal - wenn ich wieder mehr Zeit hab(morgen, übermorgen... :gruelbel - so machen und dann das Ergebnis anhängen...

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
 
#9

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

  Alt 3. Apr 2006, 20:24
Zitat von himitsu:
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
Ist doch voellig unnoetig, zuerst zu ueberpruefen, ob der User die Rechte dazu hat.
Eine Try..Except (Holzhammer Methode) genuegt doch vollends alles andere ist IMO unnoetig und zuviel Aufwand.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

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

  Alt 4. Apr 2006, 15:17
Zitat von toms:
Ist doch voellig unnoetig, zuerst zu ueberpruefen, ob der User die Rechte dazu hat.
Eine Try..Except (Holzhammer Methode) genuegt doch vollends alles andere ist IMO unnoetig und zuviel Aufwand.
Eigentlich sollte es ja reichen, wenn man nur die Rechte prüft, nochmals durch ein probeweises erstellen einer Testdatei wäre nur nochmal zur völligen Sicherheit.

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

Und warum nicht gleich der Holzhammer ... ließ weider oben nochmal nach ... da steht mindestens einer der vielen Gründe, welche dagegen sprechen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:35 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