【问题标题】:StreamReader complains that file does not exist, but it doesStreamReader 抱怨文件不存在,但确实存在
【发布时间】:2011-01-09 22:32: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);
        }

【问题讨论】:

  • 尝试使用 File.Exists 方法验证文件是否存在。

标签: c# localization streamreader filenotfoundexception


【解决方案1】:

好的,找到问题了。

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

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

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

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

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

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

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

【讨论】:

  • 非常感谢。我的 config.json 文件也有类似的问题。按照你的方法,发现它被读取为config.json.txt。
【解决方案2】:

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

例如

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

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

【讨论】:

  • 不幸的是,我不能以这种方式使用显式文件夹,因为最终用户可能会将应用程序安装在其他地方。这就是为什么我得到安装应用程序的目录路径(参见编辑)。另外,我检查了目标机器上的文件夹是否名为 Program Files。
【解决方案3】:

我也会尝试使用

File.Exists()

在打开它之前。还有一点建议是使用

Path.Combine()

当组合路径的两个部分时。

【讨论】:

【解决方案4】:

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

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

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

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

【讨论】:

    【解决方案5】:

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

    【讨论】:

      猜你喜欢
      • 2013-03-09
      • 2017-12-11
      • 2013-01-03
      • 2020-05-15
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      • 2017-10-19
      • 2016-03-08
      相关资源
      最近更新 更多