2010-01-27 84 views
12

我有一個本地化的應用程序,可在歐洲使用。StreamReader抱怨文件不存在,但它確實存在

我有一個從磁盤加載文件的菜單選項。

此操作工作正常我的開發計算機上,但在虛擬機上不工作,我用它來測試其他操作系統_如法國,產生西班牙語等

一個FileNotFoundException異常時的StreamReader嘗試打開該文件。

它說: 「 '無法找到文件C:\ Program Files文件\ MyCompany的\ MyTool \ BIN \文件\ DEBUG.TXT'」

事情是,該文件確實存在,在正確的位置,並與正確的文件名。

目標(法語)操作系統上的目錄名稱與開發機器相同。

任何想法?

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

嘗試使用File.Exists方法來驗證文件是否存在。 – Faisal 2010-01-27 12:17:34

回答

27

好的發現了問題。

確定操作系統正在瀏覽器中顯示的文件名爲「debug.txt」爲「debug.txt.txt」。

這是通過調用System.IO.Directory.GetFiles來列出目標目錄中的文件來確定的。

如果我刪除.txt擴展名,以便Windows資源管理器將其顯示爲「調試」,則會找到該文件。

原來,瀏覽器正在隱藏目標機器上已知類型的文件擴展名。

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

打開資源管理器,選擇工具 - >文件夾選項,然後查看選項卡。

向下滾動並取消選中「隱藏已知文件類型的擴展名」。

+0

謝謝 - 解決了我的問題。 – 2016-07-18 00:58:08

1

也許這前綴是錯誤的:C:\Program Files

例如,對於該文件夾變成"C:\Arquivos de Programas\"巴西葡萄牙語的Windows安裝;你應該確保你的Windows安裝不具有相同的「功能」。

如果該示例代碼在該文件夾內運行,則可以使用相對路徑。

你也可以嘗試使用ourPath = "%ProgramFiles%\MyCompany\MyTool\

1

這可能是由於安全異常作爲當前用戶試圖讀取沒有足夠的權限。我曾經遇到過很多次....

5

爲了確保你在正確的文件夾,看看Environment.SpecialFolders

例如

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

然後還檢查特定文件的權限。

+0

不幸的是,我不能以這種方式使用顯式文件夾,因爲最終用戶可能會在其他地方安裝應用程序。這就是爲什麼我得到應用程序安裝位置的目錄路徑(請參閱編輯)。 此外,我已檢查該文件夾在目標機器上稱爲Program Files。 – Kildareflare 2010-01-27 12:57:50

4

我也想嘗試打開它之前使用

File.Exists() 

。有一點建議是使用

Path.Combine() 

當組合2個路徑的部分。

相關問題