Wie überprüfen Sie die Berechtigungen zum Schreiben in ein Verzeichnis oder eine Datei?
Ich habe ein Programm schreibt Daten auf eine Datei mit einer Methode, die wie die unten.
public void ExportToFile(string filename)
{
using(FileStream fstream = new FileStream(filename,FileMode.Create))
using (TextWriter writer = new StreamWriter(fstream))
{
//try catch block for write permissions
writer.WriteLine(text);
}
}
Beim ausführen des Programms bekomme ich eine Fehlermeldung:
Unbehandelte Ausnahme: System.UnauthorizedAccessException: der Zugriff auf den Pfad 'mypath' verweigert.
System.IO.__Fehler.WinIOError(Int32 errorCode, String maybeFullPath)
System.IO.FileStream.Init(String path, FileMode mode, FileAccess access,
nt32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions
ptions, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access,
FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolea
bFromProxy)
Frage: Welchen code muss ich fangen und wie kann ich den Zugriff gewähren?
InformationsquelleAutor der Frage 18hrs | 2008-09-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
UPDATE:
Geändert der code basiert auf diese Antwort, um loszuwerden, veraltete Methoden.
Können Sie die Security-namespace, um dies zu überprüfen:
Soweit sich die Erlaubnis, Sie gehen zu müssen, um den Benutzer zu Fragen, um zu tun, was für Sie irgendwie. Wenn Sie könnten programmgesteuert tun Sie dies, dann würden wir alle in Schwierigkeiten sein 😉
InformationsquelleAutor der Antwort Josh
Wenn Ihr code ist der folgende:
Laufen Sie Gefahr, dass die Berechtigungen ändern zwischen 1 und 2, denn man kann nicht Vorhersagen, was geschehen wird auf das system zur Laufzeit. Daher sollte Ihr code handle die situation, wenn eine UnauthorisedAccessException geworfen wird, auch wenn Sie bisher geprüft haben Berechtigungen.
Beachten Sie, dass die SecurityManager - Klasse wird verwendet, um zu überprüfen, CAS-Berechtigungen und nicht wirklich überprüfen, mit dem OS, ob der aktuelle Benutzer hat Schreibzugriff auf die angegebene Position (über ACLs und ACEs). Als solche IsGranted wird immer true zurückgeben, für die lokal ausgeführten Anwendungen.
Beispiel (abgeleitet von Josh ' s Beispiel):
Es ist schwierig und nicht empfohlen zu versuchen, programmgesteuert berechnen Sie die effektiven Berechtigungen von dem Ordner, basierend auf den raw-ACLs (das sind alle, die verfügbar sind durch die System.Sicherheit.AccessControl Klassen). Andere Antworten auf Stack Overflow und die breitere web-empfehlen, versucht die Durchführung der Aktion zu wissen, ob die Erlaubnis zulässig ist. Diese post fasst das, was erforderlich ist, die zum implementieren der Berechtigung Berechnung und sollte ausreichen, um Sie aus, dies zu tun.
InformationsquelleAutor der Antwort Iain
Sorry, aber keine der vorherigen Lösungen hat mir geholfen. Muss ich überprüfen Sie beide Seiten: SecurityManager und SO Berechtigungen. Ich habe eine Menge gelernt mit Josh code und mit iain Antwort, aber ich fürchte, ich muss an Rakesh code (auch Dank ihm). Nur ein Fehler: ich fand, dass er nur Prüfungen zu Ermöglichen, und nicht für Berechtigungen zu Verweigern. Also mein Vorschlag ist:
InformationsquelleAutor der Antwort Pablonete
Seine eine Feste version der MaxOvrdrv ist Code.
InformationsquelleAutor der Antwort xmen
Da diese nicht geschlossen ist, würde ich gerne einen neuen Eintrag für jedermann, das schaut, um etwas richtig funktioniert, für Sie... mit einer Verschmelzung von dem, was ich hier gefunden, sowie die Verwendung DirectoryServices um den code zu Debuggen selbst und finde den richtigen code zu verwenden, hier ist was ich gefunden habe, das funktioniert für mich in jeder situation... beachten Sie, dass meine Lösung erweitert DirectoryInfo-Objekt... :
InformationsquelleAutor der Antwort MaxOvrdrv
Keines dieser arbeitete für mich.. Sie zurück, wie wahr, auch wenn Sie es nicht sind. Das problem ist, Sie haben zu testen, die verfügbaren Erlaubnis gegen den aktuellen Prozess Benutzerrechte, diese tests für die Datei erstellen Rechte ändern Sie einfach die FileSystemRights-Klausel zu 'Schreiben' zu testen Schreibzugriff..
InformationsquelleAutor der Antwort JGU
Können Sie versuchen, folgende code-block, um zu überprüfen, ob das Verzeichnis mit Schreibzugriff.
Prüft es die FileSystemAccessRule.
InformationsquelleAutor der Antwort RockWorld
Wow...es gibt eine Menge von low-level-Sicherheits-code in diesem thread-von denen die meisten nicht für mich arbeiten, entweder-obwohl ich sehr viel gelernt in den Prozess. Eine Sache, die ich gelernt habe, ist, dass die meisten dieser code ist nicht darauf ausgerichtet ist Anwendungen zu suchen-pro-Benutzer-Zugriffsrechte-es ist für Administratoren zu wollen, ändern Rechte programmgesteuert, die-wie bereits hingewiesen-ist nicht eine gute Sache. Als Entwickler kann ich nicht verwenden, der "easy way out" -- als Administrator ausgeführt -- die -- ich bin nicht auf der Maschine, die den code ausführt, noch sind meine Benutzer -- so, so klug sind, wie diese Lösungen auch sind-Sie sind nicht für meine situation, und wahrscheinlich nicht für die meisten Rang-und Datei-Entwickler.
Wie die meisten Poster dieser Art von Frage -- ich zunächst das Gefühl, es sei "hackey", auch-seitdem habe ich beschlossen, dass es ist in Ordnung, es zu versuchen, und lassen Sie den möglichen Ausnahme sagen Ihnen genau, was die Rechte des Nutzers sind-weil die Informationen, die ich bekam, haben mir nicht sagen, was die Rechte eigentlich waren. Die folgenden code-Tat.
End Function
InformationsquelleAutor der Antwort jinzai