it-swarm.com.de

Warum wird der Zugriff auf den Pfad verweigert?

Ich habe ein Problem, bei dem ich versuche, meine Datei zu löschen, aber ich bekomme eine Ausnahme.

if (result == "Success")
{
     if (FileUpload.HasFile)
     {
         try
         {
              File.Delete(Request.PhysicalApplicationPath + app_settings.login_images + txtUploadStatus.Text);
              string filename = Path.GetFileName(btnFileUpload.FileName);
              btnFileUpload.SaveAs(Request.PhysicalApplicationPath + app_settings.login_images + filename);
         }
         catch (Exception ex)
         {
               Message(ex.ToString());
         }
      }
}

Ich sollte auch beachten, dass der Ordner, aus dem ich versuche zu löschen, volle Kontrolle über die Netzwerkdienste hat.

Die vollständige Ausnahmemeldung lautet:

System.UnauthorizedAccessException: Zugriff auf den Pfad "C:\Benutzer\gowdyn\Documents\Visual Studio 2008\Projects\hybrid\hybrid\temp_loginimages\enviromental.jpg" wird abgelehnt. at System.IO .__ Error.WinIOError (Int32 errorCode, String maybeFullPath) at System.IO.File.Delete (String-Pfad) bei hybrid.User_Controls.Imgloader_Add_Edit_Tbl.btnUpdate_Click (Objektsender, EventArgs) Dokumente\Visual Studio 2008\Projekte\Hybrid\Hybrid\User_Controls\Imgloader_Add_Edit_Tbl.ascx.cs: Zeile 242 

Irgendwelche Ideen?

124
nick gowdy

Ich hatte auch das Problem, daher stolperte ich über diesen Beitrag. Ich habe vor und nach einem Kopieren/Löschen die folgende Codezeile hinzugefügt.

Löschen

File.SetAttributes(file, FileAttributes.Normal);
File.Delete(file);

Kopieren

File.Copy(file, dest, true);
File.SetAttributes(dest, FileAttributes.Normal);
159
riaandl

Gemäß File.Delete-Methode ...

Eine UnauthorizedAccessException bedeutet eines von 4 Dingen:

  • Der Anrufer verfügt nicht über die erforderliche Berechtigung.
  • Die Datei ist eine ausführbare Datei, die gerade verwendet wird.
  • Pfad ist ein Verzeichnis.
  • Pfad hat eine schreibgeschützte Datei angegeben.
129
CrazyTim

Dies ist ein altes Problem, aber bei der Suche bin ich darauf gestoßen. Stellt sich heraus, dass mir die tatsächliche Dateinamenkomponente im Speicherpfad für SaveAs fehlte.

string uploadPath = Server.MapPath("~/uploads");
file.SaveAs(uploadPath); // BAD
file.SaveAs(Path.Combine(uploadPath, file.FileName)); // GOOD
25
Andrew Edvalson

Wenn ein Benutzer versucht, eine Verbindung zu Ihrer Website herzustellen, weist IIS die Verbindung dem Konto IUSER_Computername zu, wobei Computername der Name des Servers ist, auf dem IIS ausgeführt wird. Standardmäßig ist das Konto IUSER_ComputerName Mitglied der Gruppe Gäste. Diese Gruppe hat Sicherheitsbeschränkungen. Versuchen Sie, den Zugriff auf IUSER_Computername auf diesen Ordner zuzugreifen

Hier ist eine sehr gut beschriebene Antwort über IIS Sicherheit

Hoffe das hilft

16
Arsen Mkrtchyan

Klicken Sie mit der rechten Maustaste auf Visual Studio und klicken Sie auf Als Administrator ausführen

Ich habe den Fehler erhalten, weil ich nicht wusste, dass das Ziel eine Datei sein sollte. Ich hatte einen Ordner als zweiten Parameter (der in cmd funktioniert). und ich habe Unhandled Exception: System.UnauthorizedAccessException: Access to the path is denied. bekommen, weil C # File.Move dort eine Datei haben will, nicht nur für den ersten Parameter, sondern auch für den zweiten. Wenn Sie also ein Verzeichnis als zweiten Parameter angeben, versucht es, eine Datei wie c:\crp zu schreiben, wenn Sie ein Verzeichnis aufgerufen haben c:\crp.

das wäre falsch File.Move(args[0],"c:\\crp");

Das wäre also richtig File.Move(args[0],"c:\\crp\\a.a");

Gleiches gilt für File.Copy

7
barlop

Wenn dies eine IIS - Website ist, auf der das Problem auftritt, überprüfen Sie die Identity-Eigenschaft der erweiterten Einstellungen für den Anwendungspool, den die Site oder Anwendung verwendet. Möglicherweise stellen Sie fest, dass ApplicationPoolIdentity festgelegt ist. In diesem Fall ist dies der Benutzer, der Zugriff auf den Pfad haben muss.

Oder Sie können den alten Stil ändern und einfach die Identität auf Network Service setzen und dem Network Service-Benutzer Zugriff auf den Pfad gewähren.

Die Ausnahme, die ausgelöst wird, wenn das Betriebssystem den Zugriff verweigert wegen eines E/A-Fehlers oder einer bestimmten Art von Sicherheitsfehler.

Ich habe das Gleiche getroffen. Stellen Sie sicher, dass die Datei NICHT HIDDEN ist.

3
user1209939

Ich habe diesen Fehler bekommen und habe ihn gleich gelöst. Ich weiß nicht, warum alle meine Ordner schreibgeschützt sind. Canceled Ich habe das schreibgeschützte Programm abgebrochen und angewendet. Es ist jedoch immer noch schreibgeschützt. Also habe ich die Datei in den Root-Ordner verschoben, es funktioniert - so komisch.

2
MOLLMY

Sie müssen die Berechtigungen des Ordners ändern, aus dem/dem Sie den Ordner löschen möchten. Klicken Sie mit der rechten Maustaste auf den übergeordneten Ordner und verwenden Sie die Registerkarte "Sicherheit", um change rights für den Benutzer zuzulassen, unter dem Ihre Anwendung ausgeführt wird.

2
Brissles

dasselbe Problem auch für mich... Ich habe den Ordner statt der Datei gezeigt. 

vergewissern Sie sich im Pfad, geben Sie Pfad + Dateiname ein

System.IO.File.WriteAllBytes("path", bytearray);
1
jineesh vp

Wenn Sie versuchen, einen freigegebenen Ordnerpfad über Ihren Code zu erreichen, müssen Sie nicht nur über die Registerkarte "Sicherheit" die richtigen Berechtigungen für den physischen Ordner erteilen. Sie müssen den Ordner auch über den Freigabe-Tab mit dem entsprechenden App-Pool-Benutzer "teilen"

1
Kacho

Eine UnauthorizedAccessException-Ausnahme wird ausgelöst, wenn das Betriebssystem den Zugriff aufgrund eines E/A-Fehlers oder eines Sicherheitsfehlers verweigert.

Wenn Sie versuchen, auf eine Datei oder einen Registrierungsschlüssel zuzugreifen, stellen Sie sicher, dass es und nicht schreibgeschützt ist.

1
reza.Nikmaram

Dieses Problem ist auch aufgetreten, als mein Fensterservice die Ausnahme auslöste

System.UnauthorizedAccessException: Access to the path "C:\\Order\\Media
44aa4857-3bac-4a18-a307-820450361662.mp4" is denied.

Daher habe ich als Lösung das mit meinem Dienst verknüpfte Benutzerkonto überprüft (siehe Abbildung unten)

 enter image description here

In meinem Fall war es also NETWORK SERVICE

Gehen Sie dann zu den Ordner-Eigenschaften, um zu überprüfen, ob das zugehörige Benutzerkonto auch auf ihrer Berechtigungsregisterkarte vorhanden ist. Es fehlte in meinem Fall und als ich es hinzufügte, wurde mein Problem behoben.

Weitere Informationen finden Sie in der folgenden Bildschirmaufnahme

 enter image description here

1
Jitender Kumar

Ich hatte den genauen Fehler beim Löschen einer Datei. Es war ein Windows-Dienst, der unter einem Dienstkonto ausgeführt wurde. Ein PDF-Dokument konnte nicht aus einem freigegebenen Ordner gelöscht werden, obwohl der Ordner über Vollzugriff verfügte.

Was für mich funktioniert hat, war das Navigieren zur Registerkarte "Sicherheit" unter "Freigegebener Ordner"> "Erweitert"> "Freigeben"> "Hinzufügen".

Ich fügte das Dienstkonto dann zur Administratorengruppe hinzu, wendete die Änderungen an und das Dienstkonto konnte dann alle Vorgänge für alle Dateien in diesem Ordner ausführen.

1
LuTheZy

Überprüfen Sie Ihre Dateieigenschaften. Wenn das schreibgeschützte Kontrollkästchen aktiviert ist, deaktivieren Sie es. Dies war mein persönliches Problem mit der UnauthorizedAccessException.

1
user3238433

Ich hatte das gleiche Problem auf einer neu verschobenen Website auf einem freigegebenen Server. Gelöst über das Web-Host-Bedienfeld (DotNetPanel) wird bei Einstellung "Schreibberechtigungen zulassen" festgelegt. Wenn Sie sich also auf einem gemeinsam genutzten Server befinden, bevor Sie den gesamten Code durchgesehen haben, lohnt sich ein Blick auf die Serverkonfiguration und Sie könnten viel Zeit sparen.

1
Drakell

Ich war da mit diesem Fehler konfrontiert 

Wenn ich Combine den Pfad mit Dateiname und FileName = ""

Es wird Path Directory keine file, was ein Problem ist wie oben erwähnt

sie müssen also nach FileName suchen

if(itemUri!="")
        File.Delete(Path.Combine(RemoteDirectoryPath, itemUri));
1

In meinem speziellen Fall habe ich wiederholt 10000 Ordner erstellt und gelöscht. Es scheint mir, dass das Problem darin bestand, dass, obwohl die Methode Directory.Delete(path, true) zurückkehrt, der darunterliegende Betriebssystemmechanismus die Dateien immer noch von der Festplatte löscht. Wenn ich gleich nach dem Löschen von alten Ordnern neue Ordner erstelle, sind einige von ihnen noch gesperrt, da sie noch nicht vollständig gelöscht wurden. Und ich erhalte System.UnauthorizedAccessException: "Zugriff auf den Pfad wird verweigert".

 enter image description here

Die Verwendung von Thread.Sleep(5000) nach Directory.Delete(path, true) löst dieses Problem. Ich stimme absolut zu, dass dies nicht sicher ist, und ich ermutige niemanden, es zu benutzen. Ich würde gerne einen besseren Ansatz zur Lösung dieses Problems finden, um meine Antwort zu verbessern. Jetzt gebe ich nur eine Idee, warum diese Ausnahme passieren kann.

class Program
{
    private static int numFolders = 10000;
    private static string rootDirectory = "C:\\1";

    static void Main(string[] args)
    {
        if (Directory.Exists(rootDirectory))
        {
            Directory.Delete(rootDirectory, true);
            Thread.Sleep(5000);
        }

        Stopwatch sw = Stopwatch.StartNew();
        CreateFolder();
        long time = sw.ElapsedMilliseconds;

        Console.WriteLine(time);
        Console.ReadLine();
    }

    private static void CreateFolder()
    {
        var one = Directory.CreateDirectory(rootDirectory);

        for (int i = 1; i <= numFolders; i++)
        {
            one.CreateSubdirectory(i.ToString());
        }
    }
}
0
Aleksei Mialkin

Überprüfen Sie zunächst den Pfad, ob der Doppelpunkt (:) fehlt oder nicht nach dem Laufwerksbuchstaben. Wenn der Doppelpunkt nicht fehlt, können Sie überprüfen, ob die Zugriffs-/Schreibberechtigung für diesen Pfad erteilt wurde.

C:\folderpath

wird gut funktionieren, aber

C\folderpath .........(missing colon)

wird Ihnen ein Fehler beim Zugriff verweigert.

0
Vijay Dodamani

Wenn Sie BitDefender verwenden, besteht eine gute Chance, dass die Funktion Safe Files Ihren Vorgang blockiert. Dies ist eine Form des Ransomware-Schutzes, die in einigen fortgeschritteneren Versionen enthalten ist.

Stellen Sie sicher, dass Sie Ihrer Anwendung Zugriff auf BitDefender gewähren, und versuchen Sie es erneut.

Weitere Details finden Sie auf dieser BitDefender-Supportseite .

0

Ich habe festgestellt, dass dieser Fehler im DESIGN MODE im Gegensatz zu? Ausführungsmodus .... Wenn Sie beispielsweise ein Klassenmitglied erstellen, das Zugriff auf eine .INI- oder .HTM-Datei (Konfigurationsdatei, Hilfedatei) erfordert, möchten Sie das Element NICHT in der Deklaration initialisieren, sondern Initialisieren Sie es später in FORM_Load () etc .... Wenn Sie es initialisieren, verwenden Sie eine Wächter-IF-Anweisung:

    /// <summary>FORM: BasicApp - Load</summary>
    private void BasicApp_Load(object sender, EventArgs e)
    {
        // Setup Main Form Caption with App Name and Config Control Info
        if (!DesignMode)
        {
            m_Globals = new Globals();
            Text = TGG.GetApplicationConfigInfo();
        }
    }

Dadurch wird verhindert, dass der MSVS-Designer versucht, eine INI - oder HTM-Datei zu erstellen, wenn Sie sich im Entwurfsmodus befinden.

0
Terry

Ich habe versucht, System.IO.File.OpenWrite (Pfad) zu verwenden.

und es hat nicht funktioniert, weil ich nur einen Pfad zu einem Verzeichnis an OpenWrite () übergeben habe, aber es erfordert einen Pfad bis zu der Datei, die Sie schreiben möchten. Daher muss ein vollständiger Pfad, der die Dateiname.extension am Ende enthält, an OpenWrite übergeben werden, um UnauthorizedAccessException zu vermeiden

0
SeanKPS

Dieser Fehler wurde ausgelöst, als ich einen Ordner sehr schnell umbenennen wollte, nachdem er verschoben oder erstellt wurde. 

Eine einfache System.Threading.Thread.Sleep(500); hat es gelöst:

void RenameFile(string from, string to)
{
   try
   {   
      System.IO.File.Move(from, to)      
   }   
   catch 
   {  
       System.Threading.Thread.Sleep(500);      
       RenameFile(from, to);      
   }   
}
0
Arjan de Bruijn

Ich hatte auch das gleiche Problem, als ich versuchte, dies nach der Bereitstellung auf dem Server zu tun:

dirPath = Server.MapPath(".") + "\\website\\" + strUserName;
if (!Directory.Exists(dirPath))
{
    DirectoryInfo DI = Directory.CreateDirectory(dirPath);
}
string filePath = Server.MapPath(".") + "\\Website\\default.aspx";
File.Copy(filePath, dirPath + "\\default.aspx", true);
File.SetAttributes(dirPath + "\\default.aspx", FileAttributes.Normal);

Ich habe in IIS einer anderen Gruppe, einschließlich Administrator, die Erlaubnis erteilt und mein Problem wurde behoben. 

0
Manish Singh

Für Benutzer, die versuchen, eine UWP-Anwendung (Universal Windows) zu erstellen, sind die Dateiberechtigungen wesentlich eingeschränkter und werden im Allgemeinen standardmäßig abgelehnt. Es ersetzt auch die Systembenutzerberechtigungen. Sie haben grundsätzlich nur Zugriff auf Dateien

  • Ihr Installationsort
  • Ihr AppData-Speicherort
  • Dateien, die mit dem File oder Folder - Picker ausgewählt wurden
  • In Ihrem App-Manifest angeforderte Standorte

Weitere Informationen finden Sie hier => https://docs.Microsoft.com/de-de/windows/uwp/files/file-access-permissions

0
Tezra