StreamReader抱怨该文件不存在,但它确实存在

时间:2010-01-27 12:04:49

标签: c# localization streamreader filenotfoundexception

我有一个本地化的应用程序可供整个欧洲使用。

我有一个从磁盘加载文件的菜单选项。

此操作在我的开发机器上运行正常但在我用于测试其他操作系统的虚拟机上不起作用_例如法语,西班牙语等。

当StreamReader尝试打开文件时,会生成FileNotFoundException。

它说“'找不到文件C:\ Program Files \ MyCompany \ MyTool \ bin \ Files \ 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);
        }

5 个答案:

答案 0 :(得分:29)

好的发现了问题。

确定操作系统正在将资源管理器中显示的文件读作“debug.txt”作为“debug.txt.txt”。

这是通过调用System.IO.Directory.GetFiles来列出目标目录中的文件来确定的。

如果我删除.txt扩展名以便Windows资源管理器将其显示为“debug”,则会找到该文件。

原来,资源管理器在目标计算机上隐藏了已知类型的文件扩展名。

  

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

     

打开资源管理器,选择工具 - >文件夹选项,然后选择视图选项卡。

     

向下滚动并取消选中“隐藏已知文件类型的扩展名”。

答案 1 :(得分:5)

要确保您位于正确的文件夹中,请查看Environment.SpecialFolders

e.g。

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

然后还要检查特定文件的权限。

答案 2 :(得分:4)

我也会尝试使用

File.Exists()
打开之前

还有一点建议是使用

Path.Combine()

组合路径的两个部分时。

答案 3 :(得分:1)

也许这个前缀错了:C:\Program Files

例如,对于巴西葡萄牙语Windows安装,该文件夹变为"C:\Arquivos de Programas\";你应该确保你的Windows安装没有相同的“功能”。

如果该示例代码在该文件夹中运行,则可以使用相对路径。

您也可以尝试使用ourPath = "%ProgramFiles%\MyCompany\MyTool\

答案 4 :(得分:1)

这可能是由于安全性异常,因为当前尝试读取的用户没有足够的权限。我遇到过很多次......