【问题标题】:C# cannot find file that is in same directory as the program [duplicate]C#找不到与程序位于同一目录中的文件[重复]
【发布时间】:2021-05-14 14:53:17
【问题描述】:

我在尝试打开与 Program.cs 位于同一目录中的文件上的 StreamReader 时收到 System.IO.FileNotFoundException。

try
{
    using (StreamReader sr = new StreamReader("file.txt")) { ... }
}

有问题的 word 文件与程序源代码存在于同一目录中。我正在使用 Visual Studio 2019,这是一个简单的命令行项目。

那么为什么 C# 不能找到这个文件,尽管它在同一个目录中?

Visual Studio 不会向我显示整个堆栈跟踪,而只会显示一行错误并没有帮助。

【问题讨论】:

  • 检查 file.txt 属性。它应该设置为如果更新则复制或总是复制
  • “Visual Studio 不会向我显示整个堆栈跟踪,而只会显示一行错误并没有帮助。” 很奇怪,Visual Studio 应该会中断并且突出显示发生错误的行。你有可能有一个自定义的catch 块吗?如果是,请将其添加到您的问题中,我们可以告诉您它有什么问题。

标签: c# streamreader


【解决方案1】:

那么为什么 C# 不能找到这个文件,尽管它在同一个目录中?

因为你的代码不在Program.cs所在的目录中执行。它在构建过程放置其二进制文件的目录中执行,该目录通常是bin\Debugbin\Release 子目录。

如果您使用 Visual Studio,则可以使用文件的Copy to output directory 属性来确保在构建过程中将其复制到此目录。

【讨论】:

    【解决方案2】:

    我敢打赌,因为当你运行程序时,你是从\bin\debug 运行的(或类似的东西,因为它可能还包括框架,如 netcoreapp3.1、net461 等...)。

    解决它的一种方法是转到 VS 中文件的“属性”窗格并选择 Copy to Output Directory: Copy Always 或者您可以将文件作为嵌入式资源工作并通过从程序集本身读取它来稍微不同地加载它.

    【讨论】:

      猜你喜欢
      • 2017-03-12
      • 2014-09-15
      • 1970-01-01
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-15
      相关资源
      最近更新 更多