13

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

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

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

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

5 回答 5

28

好的,发现问题。

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

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

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

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

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

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

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

于 2010-01-27T14:11:39.567 回答
5

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

例如

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

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

于 2010-01-27T12:16:34.557 回答
4

我也会尝试使用

File.Exists()

在打开它之前。一个小建议是使用

Path.Combine()

组合路径的两个部分时。

于 2010-01-27T12:36:29.543 回答
1

也许那个前缀是错误的:C:\Program Files

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

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

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

于 2010-01-27T12:13:39.990 回答
1

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

于 2010-01-27T12:16:21.733 回答