C# 找不到与程序位于同一目录中的文件

C# cannot find file that is in same directory as the program

当我试图在与 Program.cs.

位于同一目录中的文件上打开 StreamReader 时,我得到了一个 System.IO.FileNotFoundException
try
{
    using (StreamReader sr = new StreamReader("file.txt")) { ... }
}

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

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

Visual Studio 不会显示整个堆栈跟踪,而只会显示一行错误,这无济于事。

So why can't C# find this file, despite it being in the same directory?

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

如果你使用Visual Studio,你可以使用你的文件的Copy to output directory 属性来确保它复制到这个构建过程中的目录。

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

解决它的一种方法是转到 VS 中文件的“属性”窗格,然后 select Copy to Output Directory: Copy Always 或者您可以将文件作为嵌入式资源处理并稍微加载它不同的是从程序集本身读取它。