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

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

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

当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\

这可能是由于安全例外,因为当前试图阅读的用户没有足够的许可。我遇到了很多次。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top