2009-09-20 57 views
12

He estado guardando un pequeño archivo de datos XML en una unidad externa, sin problemas. Pero luego traté de usar la carpeta ApplicationData y otras, incluso C: \ pero no tuve suerte. Me aparece un error como "Acceso a la ruta" C: \ "denegado"."Acceso a la ruta ... denegado" (.NET C#)

Solo para confirmar, el archivo se crea y se lee bien con el código actual, en una unidad externa. Supongo que esto tiene algo que ver con los permisos de seguridad &, pero no encontré nada demasiado útil.

Gracias de antemano si me puede orientar en la dirección correcta en este caso!

 string fipData = @"F:\IL2\SIIYM\SIIYM Data.xml"; // external drive ok :-) 
     //string fipData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
     //string fipData = @"C:\"; 

     // if the XML data file doesn't exist, create it 
     bool dataFileExists = File.Exists(fipData); 
     if (dataFileExists) 
     { 
      // read the XML values 
      XDocument xData = XDocument.Load(fipData); 
      //... 
     } 
     else 
     { 
      // create & save the XML data file 
      XElement xLastPath = new XElement(el_lastPath, ""); 
      XElement xLastCode = new XElement(el_lastCode, ""); 

      XElement xRoot = new XElement(el_root); 
      xRoot.Add(xLastPath); 
      xRoot.Add(xLastCode); 

      XDocument newDataFile = new XDocument(); 
      newDataFile.Add(xRoot); 

      try 
      { 
       newDataFile.Save(fipData); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Data file unable to be created. System message:{0}".Put(Environment.NewLine + Environment.NewLine + ex.Message)); 
      } 
     } 
+0

Umm ... No sé por qué, pero al despertarme esta mañana, funciona para ApplicationData. Sería bueno saber por qué. Tuve un problema al cambiar de Debug a Release build. Solo puedo suponer que estaba relacionado con eso. ¡Gracias a todos por tus pensamientos! – MrGreggles

+0

Las declaraciones "fipData" comentadas en su código de ejemplo no especifican realmente un nombre de archivo, solo rutas. ¿Es eso un error tipográfico? –

+0

Blush Matt, esa puede haber sido la causa. Largo día, cambio de cerebro Gracias a todos por sus ideas! – MrGreggles

Respuesta

2

Sólo puedo imaginar que la aplicación debe estar en ejecución en el contexto de un usuario que no tiene acceso a la unidad local, por ejemplo, un sitio web ASP.NET que se ejecuta bajo la cuenta IIS anónima o una cuenta de servicio que solo tiene acceso a las ubicaciones de red relevantes.

+0

Vaya, el contexto aquí es: * Mi PC personal * Windows 7 * escritorio aplicación ¿Es justo que mi configuración de UAC (por defecto) son demasiado altos, tal vez? ¿Cómo puedo saber si funcionará en la computadora de otra persona? – MrGreggles

1

Lo más probable es que el disco externo esté formateado con FAT. FAT no admite la gestión de derechos para los usuarios, por lo que guardar está bien.

Además de que el usuario no tiene derechos de IIS a las otras carpetas como Adán ya

11

mencionado en los comentarios a otra respuesta que decir que esto es una aplicación de escritorio, por lo que permite tratar a cada lugar por separado.

En Vista y más allá, un usuario ordinario no tiene derechos para crear archivos en el directorio raíz de la unidad del sistema (normalmente C :). Puede verlo usted mismo abriendo C: \ en el explorador, haciendo clic con el botón derecho e intentando crear un archivo: debe obtener un aviso de UAC. Por lo tanto, si desea escribir en C: \, entonces su aplicación debe ejecutarse como administrador, a través de un manifiesto adecuado que exija elevación, o al iniciar un proceso por separado cuando desee escribir en esa ubicación.

Datos de aplicación, Environment.SpecialFolder.ApplicationData debería funcionar. Si saca el directorio real que devuelve, ¿qué obtiene?

+0

¡Gracias por la respuesta! Environment.SpecialFolder.ApplicationData: C: \ Users \ MrGreggles \ AppData \ Roaming \ SIIYM Data.xml – MrGreggles

+0

Funciona ahora, supera por qué. – MrGreggles

+2

AppData siempre debería funcionar, ¡eso es muy extraño! – blowdart

Cuestiones relacionadas