Pregunta

Tengo una aplicación localizada para su uso en toda Europa.

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

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

Se genera una FileNotFoundException cuando el StreamReader intenta abrir el archivo.

Dice "'no pudo encontrar el archivo c: archivos de programa myCompany mytool bin files debug.txt'"

La cosa es que el archivo existe, en la ubicación correcta y con el nombre de archivo correcto.

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

¿Algunas ideas?

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);
        }
¿Fue útil?

Solución

Ok encontré el problema.

Determinado que el sistema operativo estaba leyendo el archivo que se muestra en Explorer como "debug.txt" como "debug.txt.txt".

Esto se determinó mediante el uso de una llamada a System.io.Directory.getFiles para enumerar los archivos en el directorio de destino.

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

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

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

Abra Explorer, seleccione Herramientas-> Opciones de carpeta y luego la pestaña Ver.

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

Otros consejos

Para asegurarse de que esté en la carpeta correcta, mire Environment.SpecialFolders

p.ej

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

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

También intentaría usar

File.Exists()

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

Path.Combine()

Al combinar 2 partes de un camino.

Tal vez ese prefijo está mal: C:\Program Files

Por ejemplo, para las instalaciones brasileñas de Windows portugués esa carpeta se convierte en "C:\Arquivos de Programas\"; Debe asegurarse de que sus instalaciones de Windows no tengan la misma "función".

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

También podrías intentar usar ourPath = "%ProgramFiles%\MyCompany\MyTool\

Puede deberse a la excepción de seguridad ya que el usuario actual que intenta leer no tiene suficiente permiso. Me he encontrado con eso muchas veces ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top