流读器抱怨该文件不存在,但是它确实存在
-
23-09-2019 - |
题
我有一个本地化的应用程序,可以在整个欧洲使用。
我有一个菜单选项,可以从磁盘加载文件。
此操作在我的开发机上正常工作,但在我用来测试其他操作系统的虚拟机上不起作用_,例如法式,西班牙语等。
当StreamReader试图打开文件时,将生成FilenotFoundException。
它说:“'找不到文件c: program文件 mycompany mytool 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);
}
解决方案
确定找到了问题。
确定操作系统正在读取Explorer中显示的文件为“ debug.txt”为“ debug.txt.txt”。
这是通过使用对system.io.directory.getFiles列出目标目录中的文件的调用来确定的。
如果我删除.txt扩展名,以便Windows Explorer将其显示为“调试”,则找到该文件。
事实证明,Explorer正在隐藏目标计算机上已知类型的文件扩展。
供参考 - - - - - - - - - - - - - - - - - - - - - - - - - ------------------------
打开资源管理器,选择工具 - >文件夹选项,然后“查看”选项卡。
向下滚动并取消选中“隐藏已知文件类型的扩展名”。
其他提示
要确保您处于正确的文件夹中,请查看 Environment.SpecialFolders
例如
string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
然后还要检查特定文件上的权限。
我也会尝试使用
File.Exists()
在打开之前。一点建议是使用
Path.Combine()
当组合路径的2部分时。
也许那个前缀是错误的: C:\Program Files
例如,对于巴西葡萄牙窗口的安装,文件夹变为 "C:\Arquivos de Programas\"
;您应该确保Windows安装不具有相同的“功能”。
如果该示例代码在该文件夹中运行,则可以使用相对路径。
您也可以尝试使用 ourPath = "%ProgramFiles%\MyCompany\MyTool\
这可能是由于安全例外,因为当前试图阅读的用户没有足够的许可。我遇到了很多次。