2009-06-17 42 views
10

Estoy utilizando una biblioteca de FTPClient para transferir archivos desde un recurso compartido de Windows a un servidor FTP.Acceso a archivo denegado

El método SendFile de la biblioteca utiliza el siguiente código:

FileStream stream = new FileStream(localFileName, FileMode.Open); 

Esto resulta en una System.UnauthorizedAccessException ser arrojado, sin embargo soy capaz de abrir, renombrar y mover el archivo con el Explorador de Windows bajo el misma cuenta de usuario que el código se está ejecutando.

¿Alguien me puede decir por qué sucede esto?

Editar:

Lo extraño es que puedo acceder a otros archivos en el recurso compartido que se hayan concedido los mismos permisos NTFS como el que no puedo.

Esta es también una aplicación de formularios de Windows.

Actualización:

Todavía no hay suerte con esto. Puedo leer el archivo usando StreamReader pero no una secuencia de archivo. No puedo entender por qué los dos se comportan de manera diferente.

+0

está llamando esto desde una aplicación de 'ventanas' formas, o una página ASP.NET? – russau

+0

desde una aplicación de formularios de Windows –

+1

¿existe alguna posibilidad de que esté ejecutando la aplicación desde el recurso compartido? Sé que .net (de forma predeterminada) reduce los permisos de la aplicación cuando lo haces. – russau

Respuesta

0

permisos 1) NTFS en el directorio físico con el Explorador de

2) Dentro del sitio Web IIS MMC consola FTP para permitir la lectura/escritura en la carpeta FTP

3) Asegúrese de que el sitio FTP o un directorio virtual realmente existe, al comprobar el paso anterior

http://www.eggheadcafe.com/forumarchives/inetserveriisftp/Jan2006/post25322215.asp

+0

Creo que se está produciendo el error al abrir el archivo antes de enviarlo? es decir, los permisos del sitio FTP no serían un factor en este punto. – russau

1

el proceso que se está ejecutando su código no tiene permisos en el archivo. Es parte de una aplicación web; si es así, debe dar acceso a la cuenta ASPNET.

Otorgue permiso a 'todos' en el archivo y vea si todavía tiene problemas.

0

¿Su proyecto se está ejecutando desde una unidad de red? Si es así, eso significará que se ejecuta en un modo de privilegios restringido que podría causar esto. Intenta copiar el proyecto en tu unidad C y ejecutarlo de nuevo.

+0

No, lo estoy ejecutando en modo de depuración desde Visual Studio desde el directorio predeterminado de proyectos locales. Estoy intentando acceder al archivo a través de su ruta UNC, p. \\ server \ share \ file pero a medida que tenga los permisos correctos (tengo acceso completo) eso no debería ser un problema ¿no? –

27

¿Estás seguro de que es la misma cuenta de usuario? Puede usted intentar algo así como

MessageBox.Show(WindowsIdentity.GetCurrent().Name); 

?

Además, ¿está seguro de que el archivo no es de solo lectura? ¿Necesita acceso de escritura al archivo? De lo contrario, podría intentar:

FileStream stream = new FileStream(localFileName, FileMode.Open, FileAccess.Read); 
+0

Sí, misma cuenta. –

+12

Gracias por su respuesta. Mi archivo era de solo lectura, pero como no estaba solicitando acceso de escritura, asumí que definir FileAccess no era necesario. Estaba equivocado. Agregar FileAccess.Read fue la clave. –

0

Está cerca de la clase FileSecurity.

Ver en FileSecurity class

y tratar:

 // Get a FileSecurity object that represents the 
     // current security settings. 
     FileSecurity fSecurity = File.GetAccessControl(localFileName); 

     // Add the FileSystemAccessRule to the security settings. 
     fSecurity.AddAccessRule(new FileSystemAccessRule("DOMAIN\USERNAME", 
      FileSystemRights.ReadData, AccessControlType.Allow)); 

     // Set the new access settings. 
     File.SetAccessControl(localFileName, fSecurity); 
+0

Eso da como resultado: Excepción no controlada: System.Security.Principal.IdentityNotMappedException: Algunas o todas las referencias de identidad no se pudieron traducir. Existen confianzas de dominio involucradas en esta configuración, por ejemplo, si soy miembro de un grupo en otro dominio al que se le concede acceso a este archivo, me pregunto si eso está teniendo un impacto en esto. –

+0

¿Cambió la cadena "DOMINIO \ NOMBRE DE USUARIO"? – Chernikov

+0

Vaya, pero olvidé escapar de la "\", ahora funcionaba bien, pero todavía no puedo acceder al archivo. –