2010-01-27 13 views
12

Ho un'applicazione che è localizzata per l'uso in tutta Europa.StreamReader si lamenta che il file non esiste, ma lo fa

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 _ ad 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 file corretto.

I nomi di directory sul sistema operativo di destinazione (francese) sono gli stessi della macchina di sviluppo.

Qualche 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

Provare a utilizzare il metodo File.Exists per verificare se il file esiste. – Faisal

risposta

27

Ok trovato il problema.

Determinato che il sistema operativo stava leggendo il file visualizzato in explorer 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 lo visualizzi come "debug", quindi il file viene trovato.

Si scopre che explorer nascondeva estensioni di file di tipi noti sul computer di destinazione.

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

Apri Esplora, seleziona Strumenti-> Opzioni cartella, quindi la scheda Visualizza.

Scorri verso il basso e deseleziona "Nascondi estensioni per i tipi di file conosciuti".

+0

Grazie - risolto il mio problema. –

1

Forse quel prefisso è sbagliato: C:\Program Files

Ad esempio, per le installazioni brasiliano portoghese di Windows che cartella diventa "C:\Arquivos de Programas\"; dovresti assicurarti che le tue installazioni di Windows non abbiano la stessa "funzionalità".

Se quel codice di esempio viene eseguito all'interno di tale cartella, è possibile utilizzare un percorso relativo.

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

1

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 ....

5

Per assicurarsi siete nella cartella corretta, guarda Environment.SpecialFolders

esempio

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

Quindi controllare anche le autorizzazioni sul file specifico.

+0

Purtroppo non posso usare una cartella esplicita in questo modo, poiché l'utente finale può installare l'applicazione da qualche altra parte. Questo è il motivo per cui ottengo il percorso della directory in cui è installata l'applicazione (vedi Modifica). Inoltre, ho controllato che la cartella si chiami Program Files sul computer di destinazione. – Kildareflare

4

Vorrei anche provare ad usare

File.Exists() 

prima di aprirlo. E un piccolo consiglio è usare

Path.Combine() 

Quando si combinano 2 parti di un percorso.

Problemi correlati