¿Por qué se niega el acceso a la ruta?

Tengo un problema en el que bash eliminar mi archivo, pero recibo una excepción.

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

También debo tener en cuenta que la carpeta de la que bash eliminar tiene control total sobre los servicios de red.

El mensaje de excepción completo es:

System.UnauthorizedAccessException: se deniega el acceso a la ruta ‘C: \ Users \ gowdyn \ Documents \ Visual Studio 2008 \ Projects \ hybrid \ hybrid \ temp_loginimages \ enviromental.jpg’. en System.IO .__ Error.WinIOError (Int32 errorCode, String maybeFullPath) en System.IO.File.Delete (String path) en hybrid.User_Controls.Imgloader_Add_Edit_Tbl.btnUpdate_Click (Object sender, EventArgs e) en C: \ Users \ gowdyn \ Documentos \ Visual Studio 2008 \ Projects \ hybrid \ hybrid \ User_Controls \ Imgloader_Add_Edit_Tbl.ascx.cs: línea 242

¿Algunas ideas?

También tuve el problema, por lo tanto, tropecé con esta publicación. Agregué la siguiente línea de código antes y después de una Copiar / Eliminar.

Borrar

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

Dupdo

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

De acuerdo con File.Delete Method …

Una UnauthorizedAccessException acceso UnauthorizedAccessException significa una de 4 cosas:

  • La persona que llama no tiene el permiso necesario.
  • El archivo es un archivo ejecutable que está en uso.
  • Path es un directorio.
  • Path especificó un archivo de solo lectura.

Este es un problema antiguo, pero me encontré con él mientras buscaba. Resulta que me faltaba el componente de nombre de archivo real en la ruta de guardado para SaveAs …

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

Cuando un usuario intenta conectarse a su sitio web, IIS asigna la conexión a la cuenta IUSER_ComputerName , donde ComputerName es el nombre del servidor en el que se está ejecutando IIS. De forma predeterminada, la cuenta IUSER_ComputerName es un miembro del grupo Invitados. Este grupo tiene restricciones de seguridad. Intenta acceder de forma grandiosa a IUSER_ComputerName a esa carpeta

Aquí hay una respuesta muy buena sobre la seguridad de IIS

Espero que esto ayude

Haga clic derecho en Visual Studio y haga clic en Ejecutar como administrador

Recibí el error porque no me di cuenta de que el destino debería ser un archivo. Tenía una carpeta como segundo parámetro (que funciona en cmd). y recibí Unhandled Exception: System.UnauthorizedAccessException: Access to the path is denied. no Unhandled Exception: System.UnauthorizedAccessException: Access to the path is denied. porque c # File.Move quiere un archivo allí, no solo para el primer parámetro, sino también para el segundo, así que si pones un directorio como segundo parámetro, está intentando escribir un archivo como c:\crp cuando tienes un directorio llamado c:\crp .

esto sería incorrecto File.Move(args[0],"c:\\crp");

Entonces, esto sería correcto File.Move(args[0],"c:\\crp\\aa");

Lo mismo ocurre con File.Copy

Si este es un sitio web de IIS que tiene el problema, verifique la propiedad Identidad de la configuración avanzada para el grupo de aplicaciones que usa el sitio o la aplicación. Puede encontrar que está configurado en ApplicationPoolIdentity, y en ese caso, este es el usuario que tendrá que tener acceso a la ruta.

O puede ir al viejo estilo y simplemente establecer la Identidad al servicio de red, y darle acceso a la ruta al usuario del servicio de red.

La excepción que se produce cuando el sistema operativo niega el acceso debido a un error de E / S o un tipo específico de error de seguridad.

Golpeo lo mismo. Verifique para asegurarse de que el archivo NO ESTÉ OCULTO.

Obtuve este error y lo resolví en solo un momento. No sé por qué todas mis carpetas son de solo lectura, cancelé la de solo lectura y la aplico. Sin embargo, sigue siendo de solo lectura. Así que moví el archivo a la carpeta raíz, funciona, muy raro.

Debes modificar los privilegios de la carpeta desde la que intentas eliminar / guardar. Haga clic derecho en la carpeta contenedora y use la pestaña Seguridad para permitir derechos de modificación para el usuario bajo el que se ejecuta su aplicación.

Tuve el mismo problema en un sitio web recién movido en un servidor compartido. Resuelto a través del panel de host web (DotNetPanel) que establece el verdadero “permitir permisos de escritura”. Por lo tanto, si se encuentra en un servidor compartido antes de revisar todo el código vale la pena echar un vistazo a la configuración del servidor y puede ahorrarle mucho tiempo.

Tenga en cuenta que si intenta acceder a la ruta de una carpeta compartida desde su código, no solo necesita otorgar los permisos adecuados a la carpeta física a través de la pestaña de seguridad. También debe “compartir” la carpeta con el usuario del grupo de aplicaciones correspondiente a través de la pestaña Compartir

Verifique las propiedades de sus archivos. Si la opción de solo lectura está marcada, desmárcala. Este fue mi problema personal con la excepción de acceso no autorizado.

Estaba enfrentando este error porque

A veces, cuando Combine la ruta con File Name y FileName = ""

Se convierte en el Path Directory no en un file que es un problema como se mencionó anteriormente

entonces debes verificar FileName como este

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

Se produce una excepción de excepción no autorizada cuando el sistema operativo niega el acceso debido a un error de E / S o a un error de seguridad.

Si está intentando acceder a un archivo o clave de registro, asegúrese de que no sea de solo lectura .

Tuve el error exacto al eliminar un archivo. Era un servicio de Windows que se ejecutaba bajo una cuenta de servicio que no podía eliminar un documento .pdf de una carpeta compartida aunque tenía control total de la carpeta.

Lo que funcionó para mí fue navegar a la pestaña Seguridad de la Carpeta compartida> Avanzado> Compartir> Agregar.

Luego agregué la cuenta de servicio al grupo de administradores, apliqué los cambios y la cuenta de servicio pudo entonces realizar todas las operaciones en todos los archivos dentro de esa carpeta.

También me he enfrentado a este problema cuando mi servicio de ventana comenzó a lanzar la excepción

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

Entonces, como solución, verifiqué la cuenta de usuario asociada a mi servicio, como se muestra en la captura de pantalla siguiente

enter image description here

Entonces en mi caso fue el SERVICIO DE RED

Y luego fue a las propiedades de la carpeta para verificar si la cuenta de usuario asociada también existe bajo su pestaña de permisos. Faltaba en mi caso y cuando lo agregué solucionó mi problema.

Para obtener más información, consulte la siguiente captura de pantalla

enter image description here

Yo también enfrenté el mismo problema cuando trato de hacer esto después de la implementación en el servidor:

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

Otorgué permiso en IIS a otro grupo, incluido el administrador, y mi problema fue resuelto.

He encontrado que este error puede ocurrir en MODO DE DISEÑO en lugar de? modo de ejecución … Si está haciendo algo como crear un miembro de clase que requiera acceso a un archivo .INI o .HTM (archivo de configuración, archivo de ayuda) puede NO inicializar el elemento en la statement, pero inicializarlo más tarde en FORM_Load () etc … Cuando HAGAS inicializar … Usa una instrucción IF de 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(); } } 

Esto evitará que el Diseñador MSVS intente crear un archivo INI o HTM cuando se encuentre en modo de diseño.

Tuve este error cuando intenté cambiar el nombre de una carpeta muy rápidamente después de haberla movido o creado.

Un simple System.Threading.Thread.Sleep(500); resuelto:

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

En mi caso particular, repetidamente estaba creando y eliminando 10000 carpetas. Me parece que el problema radica en que, aunque el método Directory.Delete(path, true) retorna, el subyacente mecanismo del sistema operativo aún puede estar borrando los archivos del disco. Y cuando empiezo a crear nuevas carpetas inmediatamente después de la eliminación de las anteriores, algunas siguen bloqueadas porque todavía no se han eliminado por completo. Y obtengo System.UnauthorizedAccessException: “Se niega el acceso a la ruta”.

enter image description here

El uso de Thread.Sleep(5000) después de Directory.Delete(path, true) resuelve ese problema. Estoy absolutamente de acuerdo en que esto no es seguro, y no estoy alentando a nadie a usarlo. Me encantaría aquí un mejor enfoque para resolver este problema y mejorar mi respuesta. Ahora solo estoy dando una idea de por qué puede ocurrir esta excepción.

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