2010-01-27 15 views
12

Tengo una aplicación que está traducida para su uso en toda Europa.StreamReader se queja de que el archivo no existe, pero lo hace

Tengo una opción de menú que carga un archivo del disco.

Esta operación funciona bien en mi máquina dev, pero no funciona en la máquina virtual que utilizo para probar otros sistemas operativos _ por ejemplo, francés, español, etc. se genera

Un FileNotFoundException cuando el StreamReader intenta abrir el archivo .

Dice " 'No se pudo encontrar el archivo C: \ Archivos de programa \ MyCompany \ MyTool \ bin \ Archivos \ debug.txt'"

cosa es que el archivo no existe, en el lugar correcto y con el nombre de archivo correcto.

Los nombres de directorio en el sistema operativo de destino (francés) son los mismos que en la máquina de desarrollo.

¿Alguna idea?

string ourPath = System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName); 

      try 
     { 
      System.IO.StreamReader sr = System.IO.File.OpenText(ourPath + @"\bin\Files\debug.txt"); 
      string input = null; 
      while ((input = sr.ReadLine()) != null) 
      { 
       m_text.Append(input); 
      } 
      sr.Close(); 
     } 
     catch (System.IO.FileNotFoundException) 
     { 
      MessageBox.Show("LoadDebugOptions: File Not Found: " + ex.Message); 
     } 
+0

Pruebe usar el método File.Exists para verificar si el archivo existe. – Faisal

Respuesta

27

Bien, ha encontrado el problema.

Se determinó que el sistema operativo estaba leyendo el archivo que se muestra en el explorador como "debug.txt" como "debug.txt.txt".

Esto se determinó mediante el uso de una llamada a System.IO.Directory.GetFiles para listar los archivos en el directorio de destino.

Si elimino la extensión .txt para que Windows Explorer la muestre como "depuración", se encuentra el archivo.

Resulta que el explorador estaba ocultando extensiones de archivos de tipos conocidos en la máquina de destino.

FYI ------------------------------------------- ---------------------

Abra el Explorador, seleccione Herramientas-> Opciones de carpeta y luego la pestaña Vista.

Desplácese hacia abajo y desmarque "Ocultar extensiones para tipos de archivos conocidos".

+0

Gracias, resolvió mi problema. –

1

Tal vez ese prefijo es falso: C:\Program Files

Por ejemplo, para los brasileños instalaciones portuguesa de Windows que se convierte en la carpeta "C:\Arquivos de Programas\"; debe asegurarse de que sus instalaciones de Windows no tengan la misma "característica".

Si ese código de ejemplo se ejecuta dentro de esa carpeta, puede utilizar una ruta relativa.

También puede probar a usar ourPath = "%ProgramFiles%\MyCompany\MyTool\

1

Puede ser debido a excepción de seguridad como el usuario actual tratando de leer no tiene permisos suficientes. He encontrado que muchas veces ....

5

Para asegurarse de que está en la carpeta correcta, mira Environment.SpecialFolders

por ejemplo,

string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles); 

Luego, también verifique los permisos en el archivo específico.

+0

Lamentablemente, no puedo usar una carpeta explícita de esta manera, ya que el usuario final puede instalar la aplicación en otro lugar. Esta es la razón por la que obtengo la ruta del directorio donde está instalada la aplicación (ver Editar). Además, he comprobado que la carpeta se llama Archivos de programa en el equipo de destino. – Kildareflare

4

También me gustaría tratar de utilizar

File.Exists() 

antes de abrirlo. Y un pequeño consejo es usar

Path.Combine() 

Al combinar 2 partes de una ruta.

Cuestiones relacionadas