AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Schreibrechte auf Ordner unter Win7 ermitteln

Schreibrechte auf Ordner unter Win7 ermitteln

Ein Thema von Poolspieler · begonnen am 29. Jun 2012 · letzter Beitrag vom 2. Jul 2012
Antwort Antwort
Poolspieler

Registriert seit: 9. Aug 2004
156 Beiträge
 
Delphi XE7 Professional
 
#1

Schreibrechte auf Ordner unter Win7 ermitteln

  Alt 29. Jun 2012, 17:34
Hallo zusammen,
unter folgendem Thread http://www.delphipraxis.net/102745-h...utz-hat-2.html wurde das Thema besprochen - aber nicht geklärt.

Iststand:
Mein Programm hat eine Datei "settings.ini" im Programmverzeichnis (ja, im Programmverzeichnis).
Diese wird beim Start in ein TMemInifile geladen.
Bei Programmende (oder auch bei einem expliziten Flush während der Programmlaufteit) wird mittelse MemIniFile.update auf Platte geschrieben.

Mein Problem:
Mein Programm soll nun auch direkt von CD startbar sein OHNE dass Dateien auf dem PC angelegt/geschrieben werden.
Ich hätte nun gern abgefragt, ob der Ordner, in dem das Inifile liegt Schreibzugriff hat - oder nicht. Das Attribut "Schreibgeschützt" hilft hier nicht, weil bei schreibgeschützten (readonly eingehängten) SD-Karten das Schreibschutz-Flag NICHT unbedingt gesetzt ist.

Ich hatte bereits versucht, eine temporäre Datei im betroffenen Ordner (mit und ohne try except ausprobiert) mit FileCreate zu erzeugen.
Wenn ich die Datei erzeugen konnte, dann hätte ich sie wieder geschlossen und gelöscht --> also Schreibzugriff=JA
ansonsten
Schreibzugriff=NEIN

-->ABER:
Win7 (Ultimate) ist mal wieder schneller. Da bekomme ich TROTZ Try-Except-Block die Meldung
Zitat:
Der Datenträger ist schreibgeschützt und kann nicht beschrieben werden. Entfernen Sie den Schreibschutz vom Datenträger in Laufwerk J:.
Mir gehen langsam die Ideen aus. Die einzige sehr sehr unschöne wäre, beim Start des Programms z.B. über die Inidatei das Verhalten des Programms auf Readonly = True/False zu setzen. --> also KEIN MemIniFile.update ausführen...
Mir wäre allerdings schon lieber, wenn dies automatisch ginge...

Hat jemand eine Idee?

Viele Grüße,

Poolspieler
Andreas

Geändert von Poolspieler (29. Jun 2012 um 17:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Schreibrechte auf Ordner unter Win7 ermitteln

  Alt 29. Jun 2012, 18:01
Ich habe leider keinen derartigen Datenträger zu Hand, was liefert den DiskFree?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.931 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Schreibrechte auf Ordner unter Win7 ermitteln

  Alt 29. Jun 2012, 19:55
Da ist nichst schneller.

Es gibt einige "Fehlermeldungen" bezüglich Datenträger, die werden nicht als Exception/Fehlercode behandelt, sondern es wird einfach nur eine MessageBox angezeigt und dagegen kann man nichts mit Try-Except ausrichten.
Sowas kenn ich noch von Disketten und teilweise auch von CDs, welche grade nicht eingelegt sind.

Ich weiß jetzt zwar nichts Genaues, aber irgendwie kann man diese Fehlerbehandlung beinflussen.
SetErrorMode oder sowas.
Damit würde man dann Windows sagen es soll selber keine Fehler behandeln und es unserem Programm überlassen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Poolspieler

Registriert seit: 9. Aug 2004
156 Beiträge
 
Delphi XE7 Professional
 
#4

AW: Schreibrechte auf Ordner unter Win7 ermitteln

  Alt 29. Jun 2012, 20:40
Hallo Zusammen,
vielen Dank für Eure Antworten.

Diskfree liefert das exakt selbe, wie "rechte Maustaste/Eigenschaften im Explorer": 1971585024 Bytes frei --> egal, ob schreibgeschützt oder nicht.

Zu Testzwecken habe ich eine SD-Karte verwendet, deren Schreibschutz ich über den kleinen Lock-Schalter aktivieren und deaktivieren kann. Sonst müßte ich ja jedes Mal eine CD Brennen...
Gut, vielleicht ist diese Idee nicht sooooo schlau gewesen, weil sich unter dem "magischen" Win7 eine SD-Karte etwas anders verhält... keine Ahnung!
Und bei einer CD sind die Schreibschutz-Flags ja immer gesetzt...

Eine weitere Seltsamkeit:
Wenn ich das Programm von D:\ (nicht schreibgeschützt) ausführe und einen Button mit
Code:
...
var
  _f: integer;
begin
  _f := FileCreate('J:\test.txt'); // J:\ ist schreibgeschützt
  ShowMessage(IntToStr(_f));
end;
hinterlege, dann bekomme ich KEINE Meldung.
Führe ich die selbe EXE aber von J:\, dann BEKOMME ich die Meldung von Windows!

Hat das in irgend einer Form mit dem Virtualstore zu tun?


--> Kann ich mir zwar eigentlich nicht vorstellen, weil das Programm in einem Unterordner von J:\ liegt - und auch bei FileCreate('J:\test.txt') kommt die Fehlermeldung...

Ich bin kurz davor, meinen Workaround über die INI-Datei zu machen

Auf der anderen Seite kann es doch nicht so schwer sein, zu überprüfen, ob geschrieben werden kann...

Viele Grüße,

Poolspieler
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.078 Beiträge
 
Delphi 7 Personal
 
#5

AW: Schreibrechte auf Ordner unter Win7 ermitteln

  Alt 29. Jun 2012, 22:06
Der Schreibschutz einer Datei und eines Mediums/Laufwerks hat nichts miteinander zu tun.
Die Meldung
"Der Datenträger...." bezieht sich auf das Medium (Diskette,USB,.....) das einen Phys. Schreibschutz hat. Davon unabhängig ist der Schreibschutz einzelner Dateien.

Wenn Du also diese Meldung erhälst, dann leitet Windows nur eine Meldung des Controlers weiter.

(es könnte z.B. eine SCSI-Meldung sein, aber da bin ich nicht mehr so fit)

Gruß
K-h
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.931 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Schreibrechte auf Ordner unter Win7 ermitteln

  Alt 29. Jun 2012, 22:34
Warum liest eigentlich keiner das durch, was Andere schreiben?

MSDN-Library durchsuchenSetErrorMode

(meine Erinnerung/Vermutung klingt doch garnicht so schlecht)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
6.917 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

AW: Schreibrechte auf Ordner unter Win7 ermitteln

  Alt 30. Jun 2012, 07:18
Um genau zu sein:
Delphi-Quellcode:
var
  OldErrorMode: Cardinal;
vegin
  OldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS);
  try
    // do something
  finally
    SetErrorMode(OldErrorMode);
  end;
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Poolspieler

Registriert seit: 9. Aug 2004
156 Beiträge
 
Delphi XE7 Professional
 
#8

AW: Schreibrechte auf Ordner unter Win7 ermitteln

  Alt 2. Jul 2012, 10:57
Hallo Ihr zwei,
vielen Dank für Eure Antworten!

So hat es perfekt funktioniert!

Viele Grüße

Poolspieler
Andreas
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 06:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2018 by Daniel R. Wolf