AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Zugriff auf Ordner oder Datei nicht möglich - Wie den Grund ermitteln?
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf Ordner oder Datei nicht möglich - Wie den Grund ermitteln?

Ein Thema von Ares · begonnen am 13. Okt 2010 · letzter Beitrag vom 14. Okt 2010
Antwort Antwort
Ares

Registriert seit: 5. Dez 2002
269 Beiträge
 
#1

Zugriff auf Ordner oder Datei nicht möglich - Wie den Grund ermitteln?

  Alt 13. Okt 2010, 09:11
Hallo!

Greift ein Programm auf Dateien oder Ordner zu, die für den aktuellen Nutzer nicht freigegeben sind kommt es zu einer EFOpenError Exception:

Code:
stream := TFileStream.Create('C:\SomeFile.abc', fmOpenRead or fmShareDenyNone);
Leider kann ich aus der Exception nicht den Grund für den Fehler erkennen. Es kann wie beschrieben an fehlenden Zugriffsrechten liegen, genauso gut könnte es aber auch sein, dass die Datei bereits geöffnet ist und kein weiterer Zugriff erlaubt ist.

Der Message-Text der Exception gibt zwar genauere Auskunft, aber das ist keine verlässliche Methode. Unter anderen Windows Versionen lautet die Nachricht vielleicht nicht mehr "Zugriff verweigert" sondern "Zugriff wurde verweigert". Schon schlägt ein Test fehl. Bei anderen Sprachversionen von Windows funktioniert der Test natürlich nie.

Gibt es also eine Möglichkeit die genaue Ursache dafür zu ermitteln, dass der Zugriff nicht möglich ist?

Besten Dank!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Zugriff auf Ordner oder Datei nicht möglich - Wie den Grund ermitteln?

  Alt 13. Okt 2010, 09:14
Der Message-Text der Exception gibt zwar genauere Auskunft, aber das ist keine verlässliche Methode. Unter anderen Windows Versionen lautet die Nachricht vielleicht nicht mehr "Zugriff verweigert" sondern "Zugriff wurde verweigert". Schon schlägt ein Test fehl.
Was denn für ein Test? Der Text gibt dir doch schon den Grund an.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Zugriff auf Ordner oder Datei nicht möglich - Wie den Grund ermitteln?

  Alt 13. Okt 2010, 09:17
Einfach bei Windows nachfragen: GetLastError
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: Zugriff auf Ordner oder Datei nicht möglich - Wie den Grund ermitteln?

  Alt 13. Okt 2010, 09:28
Wobei man anhand von GetLastError vermutlich auch nicht rausbekommt warum genau der Zugriff jetzt veweigert wurde. Der ErrorCode lautet ja in desem Falle immer ERROR_ACCESS_DENIED.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (13. Okt 2010 um 09:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Zugriff auf Ordner oder Datei nicht möglich - Wie den Grund ermitteln?

  Alt 13. Okt 2010, 09:28
Das Problem ist erstmal, daß TFileStream.Create eine Exception (EFOpenError) wirft, deren einziger genauerer Hinweis der Messages-Text ist.

Dieses Zugriff verweigert ist ein Standardtext und wird sich vermutlich nicht so schnell ändern,
abgesehn davon, daß er lokalisiert ist und in einem englischem Windows bestimmt auch englisch sein wird.

Einzige Lösung wäre sich direkt an MSDN-Library durchsuchenCreateFile zu wenden und danach GetLastError auszuwerten.

PS: GetLastError nach TFileStream.Create bringt garnichts Sicheres, da nach CreateFile noch einige andere APIs aufgerufen werden, bevor dieser Konstructor verlassen wird.


Also genauer geht es nicht, wie Zacherl schon sagte.
Man kann höchstens etwas mitbekommen in der Art "Datei existiert nicht", "Pfad existiert nicht", "Zugriff verweigert", "Lesefehler" oder Ähnliches.

"Zugriff verweigert" kann vieles heißen: z.B. "fehlende Benutzerrechte" oder "ungenügend Sharingrechte", wobei man letzeres aus zwei Richtungen betrachten kann "die eigenen gewährten Sharingrechte sind nicht ausreichend genut, für einen bereits existierenden/offenen Zugriff" oder "die andere Seite erlaub den eigenen Zugriff nicht" oder eine Mischung aus Beidem.
$2B or not $2B

Geändert von himitsu (13. Okt 2010 um 09:35 Uhr)
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Zugriff auf Ordner oder Datei nicht möglich - Wie den Grund ermitteln?

  Alt 13. Okt 2010, 21:50
Moin Himitsu,

"Zugriff verweigert" kann vieles heißen: z.B. "fehlende Benutzerrechte" oder "ungenügend Sharingrechte",
das sehe ich anders.
"Zugriff verweigert" deutet immer auf fehlende Rechte hin.
Wenn die Datei durch den Zugriff eines andere Programmes gesperrt ist, erhält man eher eine Meldung wie "Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird"
Fehlende Rechte sollten dabei allerdings vorgehen, falls beide Probleme vorliegen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Zugriff auf Ordner oder Datei nicht möglich - Wie den Grund ermitteln?

  Alt 14. Okt 2010, 07:43
Gut, das könnte sein.
Hatte diesen Fehler schon lange nicht mehr gesehn, aber mir war halt so, als wenn da die Fehlermeldung nicht anders klang.
Aber wenn dem so ist, dann ist es eh besser.


Was man aber nicht erfährt ist, welche Rechte und warum einem den Zugriff verwähren
oder welches Programm einem wie den Zugriff verwehrt oder ob man sich selber aussperrt.

Gut, bei den Rechten könnte man jetzt rangehn und von der Datei (eventuell auch noch von den übergeordneten Verzeichnissen und dem Datenträger) die Rechte abfragen, die eigenen Rechte auslesen und dann selber schauen was/wie/wo los ist.
Eventuell gibt's dafür ja auch schon was halbwegs Fertiges in den JEDI-Security-Libs.
$2B or not $2B

Geändert von himitsu (14. Okt 2010 um 07:52 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:56 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