Perché l’accesso al percorso è negato?

Sto riscontrando un problema in cui sto cercando di cancellare il mio file ma ottengo un’eccezione.

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()); } } } 

Inoltre dovrei notare che la cartella che sto provando ad eliminare ha il pieno controllo dei servizi di rete.

Il messaggio completo di eccezione è:

System.UnauthorizedAccessException: l’accesso al percorso ‘C: \ Users \ gowdyn \ Documents \ Visual Studio 2008 \ Projects \ hybrid \ hybrid \ temp_loginimages \ enviromental.jpg’ è negato. a System.IO .__ Error.WinIOError (Int32 errorCode, String maybeFullPath) a System.IO.File.Delete (String path) su hybrid.User_Controls.Imgloader_Add_Edit_Tbl.btnUpdate_Click (Oggetto mittente, EventArgs e) in C: \ Users \ gowdyn \ Documents \ Visual Studio 2008 \ Projects \ hybrid \ hybrid \ User_Controls \ Imgloader_Add_Edit_Tbl.ascx.cs: riga 242

Qualche idea?

Ho anche avuto il problema, quindi mi sono imbattuto in questo post. Ho aggiunto la seguente riga di codice prima e dopo una copia / cancella.

Elimina

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

copia

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

Secondo il metodo File.Delete …

Un UnauthorizedAccessException significa una delle 4 cose:

  • Il chiamante non ha il permesso richiesto.
  • Il file è un file eseguibile che è in uso.
  • Path è una directory.
  • Percorso specificato un file di sola lettura.

Questo è un vecchio problema, ma mi sono imbattuto durante la ricerca. Si scopre che mi mancava il vero componente del nome file nel percorso di salvataggio per SaveAs …

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

Quando un utente tenta di connettersi al proprio sito Web, IIS assegna la connessione all’account IUSER_NameComputer , dove ComputerName è il nome del server su cui IIS è in esecuzione. Per impostazione predefinita, l’account IUSER_ComputerName è un membro del gruppo Guests. Questo gruppo ha restrizioni di sicurezza. Provare a accedere a IUSER_ComputerName in quella cartella

Ecco una risposta molto buona descritta sulla sicurezza di IIS

Spero che questo ti aiuti

Fare clic con il tasto destro su Visual Studio e fare clic su Esegui come amministratore

Ho ricevuto l’errore perché non mi ero reso conto che dest doveva essere un file. Ho avuto una cartella come secondo parametro (che funziona in cmd). e ho ottenuto Unhandled Exception: System.UnauthorizedAccessException: Access to the path is denied. perché c # File.Move vuole un file lì, non solo per il primo parametro, ma anche per il secondo, e quindi se metti una directory come secondo parametro, sta provando a scrivere un file come c:\crp quando hai una directory chiamato c:\crp .

questo sarebbe errato File.Move(args[0],"c:\\crp");

Quindi, questo sarebbe corretto File.Move(args[0],"c:\\crp\\aa");

Lo stesso vale per File.Copy

Se si tratta di un sito Web IIS che presenta il problema, controllare la proprietà Identity delle impostazioni avanzate per il pool di applicazioni utilizzato dal sito o dall’applicazione. Potresti scoprire che è impostato su ApplicationPoolIdentity e in tal caso questo è l’utente che dovrà avere accesso al percorso.

Oppure puoi andare vecchio stile e semplicemente impostare Identity to Network Service, e dare al servizio di rete l’accesso dell’utente al percorso.

L’eccezione che viene generata quando il sistema operativo nega l’accesso a causa di un errore I / O o di un tipo specifico di errore di sicurezza.

Ho colpito la stessa cosa. Verificare che il file NON sia NASCOSTO.

Ho ricevuto questo errore e l’ho risolto in un attimo. Non so perché tutte le mie cartelle siano di sola lettura, ho cancellato la sola lettura e l’ho applicata. Tuttavia, è ancora di sola lettura. Così ho spostato il file nella cartella principale, funziona – così strano.

È necessario modificare i privilegi della cartella che si sta tentando di eliminare da / salvare in. Fare clic con il tasto destro del mouse sulla cartella contenente e utilizzare la scheda Sicurezza per consentire i diritti di modifica per l’utente in cui viene eseguita l’applicazione.

Ho avuto lo stesso problema su un sito web appena spostato su un server condiviso. Risolto tramite il pannello host web (DotNetPanel) impostando true “allow permessi di scrittura”. Quindi, se sei su un server condiviso prima di rivedere tutto il codice vale la pena dare un’occhiata alla configurazione del server e potrebbe farti risparmiare un sacco di tempo.

Si tenga presente che se si sta tentando di raggiungere un percorso di cartella condivisa dal proprio codice, non è necessario fornire le autorizzazioni appropriate alla cartella fisica attraverso la scheda di sicurezza. È inoltre necessario “condividere” la cartella con l’utente del pool di app corrispondente attraverso la scheda Condividi

Controlla le proprietà dei tuoi file. Se è selezionata la sola lettura, deselezionala. Questo era il mio problema personale con UnauthorizedAccessException.

Stavo affrontando questo errore perché

A volte quando Combine il percorso con Nome file e FileName = ""

Diventa Path Directory non un file che è un problema come menzionato sopra

quindi è necessario verificare FileName come questo

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

Un’eccezione UnauthorizedAccessException viene generata quando il sistema operativo nega l’accesso a causa di un errore I / O o di un errore di sicurezza.

Se si sta tentando di accedere a un file o una chiave del Registro di sistema, assicurarsi che non sia di sola lettura .

Ho avuto l’errore esatto durante l’eliminazione di un file. Si trattava di un servizio Windows in esecuzione con un account di servizio che non era in grado di eliminare un documento .pdf da una cartella condivisa anche se aveva il controllo completo della cartella.

Ciò che ha funzionato per me era la navigazione nella scheda Sicurezza della cartella condivisa> Avanzate> Condividi> Aggiungi.

Ho quindi aggiunto l’account di servizio al gruppo degli amministratori, applicato le modifiche e l’account di servizio è stato quindi in grado di eseguire tutte le operazioni su tutti i file all’interno di tale cartella.

Ho anche affrontato questo problema quando il mio servizio finestra ha iniziato a lanciare l’eccezione

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

Quindi, come soluzione, ho controllato l’account utente associato al mio servizio, come mostrato nell’acquisizione dello schermo sottostante

inserisci la descrizione dell'immagine qui

Quindi nel mio caso era il SERVIZIO DI RETE

E poi è andato alle proprietà della cartella per verificare se l’account utente associato esiste anche sotto la loro scheda di authorization. Nel mio caso mancava e quando l’ho aggiunto ho risolto il problema.

Per ulteriori informazioni si prega di controllare l’acquisizione dello schermo sottostante

inserisci la descrizione dell'immagine qui

Anch’io ho affrontato lo stesso problema quando provavo a farlo dopo la distribuzione sul server:

 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); 

Ho concesso il permesso in IIS ad altri gruppi incluso l’amministratore e il mio problema è stato risolto.

Ho scoperto che questo errore può verificarsi in MODALITÀ DI PROGETTO in contrapposizione a? modalità di esecuzione … Se si sta eseguendo qualcosa come la creazione di un membro della class che richiede l’accesso a un file .INI o .HTM (file di configurazione, file della guida), è ansible NON inizializzare l’elemento nella dichiarazione, ma inizializzarlo in un secondo momento in FORM_Load () ecc … Quando si inizializza … Utilizzare un’istruzione IF di guardia:

  /// FORM: BasicApp - Load 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(); } } 

Ciò manterrà la Progettazione MSVS provando a creare un file INI o HTM quando si è in modalità progettazione.

Ho avuto questo errore quando ho provato a rinominare una cartella molto rapidamente dopo che era stata spostata o creata.

Un semplice System.Threading.Thread.Sleep(500); risolto:

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

Nel mio caso specifico stavo ripetutamente creando e cancellando 10000 cartelle. Mi sembra che il problema risiedesse nel fatto che, nonostante il metodo Directory.Delete(path, true) restituisca, il meccanismo del sottosuolo OS potrebbe ancora eliminare i file dal disco. E quando sto iniziando a creare nuove cartelle immediatamente dopo la delizione di quelle vecchie, alcune di esse sono ancora bloccate perché non sono ancora completamente cancellate. E sto ottenendo System.UnauthorizedAccessException: “L’accesso al percorso è negato”.

inserisci la descrizione dell'immagine qui

L’utilizzo di Thread.Sleep(5000) dopo Directory.Delete(path, true) risolve il problema. Sono assolutamente d’accordo che questo non è sicuro, e non sto incoraggiando nessuno a usarlo. Mi piacerebbe qui un approccio migliore per risolvere questo problema per migliorare la mia risposta. Ora sto solo dando un’idea del perché questa eccezione possa accadere.

 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()); } } }