2010-01-27 133 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个路径的部分。

相关问题