C# StreamReader抱怨文件不存在,但确实存在

C# StreamReader抱怨文件不存在,但确实存在,c#,localization,streamreader,filenotfoundexception,C#,Localization,Streamreader,Filenotfoundexception,我有一个本地化的应用程序,可在欧洲各地使用 我有一个从磁盘加载文件的菜单选项 此操作在我的开发机器上运行良好,但在我用来测试其他操作系统(如法语、西班牙语等)的虚拟机上不起作用 StreamReader尝试打开文件时会生成FileNotFoundException 它说“'找不到文件C:\Program Files\MyCompany\MyTool\bin\Files\debug.txt'” 问题是,文件确实存在,位置正确,文件名正确 目标(法语)操作系统上的目录名与开发人员计算机上的目录名相同

我有一个本地化的应用程序,可在欧洲各地使用

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

此操作在我的开发机器上运行良好,但在我用来测试其他操作系统(如法语、西班牙语等)的虚拟机上不起作用

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);
        }

可能前缀是错误的:
C:\ProgramFiles

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

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


您也可以尝试使用
ourPath=“%ProgramFiles%\MyCompany\MyTool\
这可能是由于安全异常,因为当前尝试读取的用户没有足够的权限。我已经多次遇到这种情况……

要确保您位于正确的文件夹中,请查看
环境。SpecialFolders

e、 g


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

我也会尝试使用

File.Exists()
在打开它之前。还有一点建议是使用

Path.Combine()
组合路径的两部分时。

确定发现问题

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

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

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

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

供参考----------------------------------------------------------------

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

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


请尝试使用File.Exists方法验证文件是否存在。很遗憾,我无法以这种方式使用显式文件夹,因为最终用户可能会在其他地方安装该应用程序。这就是我获取安装该应用程序的目录路径的原因(请参阅编辑)。此外,我已检查目标计算机上的文件夹是否称为Program Files。请注意路径。如果有任何用户输入的机会,请将其合并:谢谢Chris,确实,可能需要进行检查!非常感谢。我的config.json文件也有类似问题。按照您的方法,发现它被读取为config.json.txt。
Path.Combine()