Domanda

Ho una domanda che è localizzato per l'uso in tutta Europa.

Ho un opzione di menu che carica un file dal disco.

Questa operazione funziona bene sulla mia macchina dev ma non funziona nella macchina virtuale che uso per testare altri sistemi operativi _ per esempio francese, spagnolo ecc.

Un FileNotFoundException viene generato quando lo StreamReader tenta di aprire il file.

Si dice " 'Impossibile trovare il file C: \ Program Files \ MyCompany \ MyTool \ bin \ Files \ debug.txt'"

La cosa è, il file non esiste, nella posizione corretta e con il nome corretto.

I nomi delle directory sul target sistema operativo (francese) sono gli stessi che la macchina dev.

Tutte le idee?

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);
        }
È stato utile?

Soluzione

Ok trovato il problema.

ha stabilito che il sistema operativo è stato leggendo il file visualizzato in Esplora risorse come "debug.txt" come "debug.txt.txt".

Questo è stato determinato utilizzando una chiamata a System.IO.Directory.GetFiles per elencare i file nella directory di destinazione.

Se rimuovo l'estensione .txt in modo che Windows Explorer visualizza come "debug", allora il file viene trovato.

Risulta explorer nascondeva le estensioni dei file di tipi conosciuti sul computer di destinazione.

  

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

     

Apri Explorer, Seleziona Strumenti-> Opzioni cartella, quindi visualizzazione schede.

     

Scorrere verso il basso e deselezionare "Nascondi le estensioni per i tipi di file conosciuti".

Altri suggerimenti

Per assicurarsi che siete nella cartella corretta, guarda Environment.SpecialFolders

per es.

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

Poi controlla anche i permessi sul file specifico.

Vorrei anche provare ad usare

File.Exists()

prima di aprirlo. E un piccolo consiglio è di usare

Path.Combine()

Quando si combinano 2 parti di un percorso.

Forse è prefisso è sbagliato: C:\Program Files

Ad esempio, per il brasiliano installazioni portoghese di Windows la cartella diventa "C:\Arquivos de Programas\"; si dovrebbe assicurarsi che il proprio Windows installazioni non ha lo stesso "caratteristica".

Se questo codice di esempio viene eseguito all'interno di quella cartella, si potrebbe utilizzare un percorso relativo.

Si potrebbe anche provare a utilizzare ourPath = "%ProgramFiles%\MyCompany\MyTool\

Può essere a causa di un'eccezione di sicurezza come l'utente corrente cercando di leggere non dispone di autorizzazioni sufficienti. Ho incontrato molte volte che ....

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top