Pergunta

Eu tenho um aplicativo localizado para uso em toda a Europa.

Eu tenho uma opção de menu que carrega um arquivo do disco.

Esta operação funciona bem na minha máquina de desenvolvimento, mas não funciona na máquina virtual que eu uso para testar outros sistemas operacionais _ por exemplo, francês, espanhol etc.

Uma FileNotFoundException é gerada quando o fluxo de streamreador tenta abrir o arquivo.

Ele diz "'não conseguiu encontrar o arquivo C: Arquivos de Programas MyCompany Mytool Bin Files Debug.txt'" "

A coisa é que o arquivo existe, no local correto e com o nome do arquivo correto.

Os nomes do diretório no sistema operacional de destino (francês) são os mesmos da máquina dev.

Alguma ideia?

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

Solução

Ok, encontrou o problema.

Determinou que o sistema operacional estava lendo o arquivo exibido no Explorer como "debug.txt" como "debug.txt.txt".

Isso foi determinado usando uma chamada para system.io.directory.getfiles para listar os arquivos no diretório de destino.

Se eu remover a extensão .txt para que o Windows Explorer o exiba como "depuração", o arquivo é encontrado.

Acontece que o Explorer estava ocultando extensões de arquivo de tipos conhecidos na máquina de destino.

PARA SUA INFORMAÇÃO ------------------------------------------------- ---------------

Abra o Explorer, selecione Ferramentas-> Opções de pasta e a guia Exibir.

Role para baixo e desmarque "Ocultar extensões para tipos de arquivos conhecidos".

Outras dicas

Para ter certeza de que você está na pasta correta, olhe para Environment.SpecialFolders

por exemplo

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

Em seguida, verifique também as permissões no arquivo específico.

Eu também tentaria usar

File.Exists()

antes de abri -lo. E um pequeno conselho é usar

Path.Combine()

Ao combinar 2 partes de um caminho.

Talvez esse prefixo esteja errado: C:\Program Files

Por exemplo, para instalações do Windows portuguesas brasileiras que a pasta se torna "C:\Arquivos de Programas\"; Você deve garantir que suas instalações do Windows não tenham o mesmo "recurso".

Se esse código de amostra executar dentro dessa pasta, você pode usar um caminho relativo.

Você também poderia tentar usar ourPath = "%ProgramFiles%\MyCompany\MyTool\

Pode ser devido à exceção de segurança, pois o usuário atual que tentava ler não tem permissão suficiente. Eu encontrei isso muitas vezes ....

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top