从当前项目获取文件路径

3
在我的Visual Studio控制台应用程序中,我的项目位于以下位置:
c:\MyProject\FilesToUpload\test.txt

我正在尝试使用以下代码访问此文件:

string path = Path.Combine(Environment.CurrentDirectory, @"FilesToUpload\", "test.txt");

但是这个路径返回的是:c:\MyProject\bin\debug\net461\FilesToUpload\test.txt 我想要获取的路径是:c:\MyProject\FilesToUpload\test.txt

你是否已经将项目托管到特定的 Web 服务器上?而不是使用 Visual Studio 中的服务器。 - Cuppyzh
1
当你不仅在开发中运行代码,而实际上已经将其部署到生产环境时,你打算做什么?那时肯定不会有项目文件夹了吧? - ProgrammingLlama
2个回答

2
Environment.CurrentDirectory会返回您的程序当前运行的路径。您需要做的是决定以下选项之一:
  • 将该路径与目录"FilesToUpload"联系起来。
  • 硬编码路径,例如c:\MyProject\FilesToUpload\
  • 可配置的路径,然后在应用程序中指定和读取。 个人而言,我更喜欢这个选项,因为它不会过于依赖您从哪里运行应用程序。

在第一种情况下,您可以使用类似以下内容的东西:


var relation = @"..\..\..\FilesToUpload\";
var currPath = Path.Combine(Environment.CurrentDirectory, relation, "test.txt");

更新/澄清:

对于第一种选项,在您的情况下(您的示例),使用相对路径应该有效地将返回的路径从以下路径更改为:

最初的回答:

针对您的情况(即示例),使用相对路径应该可以有效地将返回的路径从以下路径更改为:

c:\MyProject\bin\debug\net461\FilesToUpload\test.txt

To:

c:\MyProject\bin\debug\net461\..\..\..\FilesToUpload\test.txt

尝试以下方法,看看是否可行 - 如果路径不完全正确,您应该能够找出如何调整它。最初的回答。

这是什么关系?我刚刚在变量relation中更改了我的项目名称,但它仍然返回bin文件夹中的路径。 - James
Environment.CurrentDirectory返回的路径仍将保持不变。你想做的是添加一个相对路径,它将把你从Environment.CurrentDirectory目录移动到你想要的目录。在你的例子中,我认为这将向上三个目录(即..\..\..),然后进入FilesToUpload - Kjartan
@James,我已经更新了我的答案,以使这部分更加清晰。 - Kjartan

1

"Environment.CurrentDirectory" 返回正确的路径。您的应用程序是一个“exe”文件,而不是源文件。它运行在编译输出目录中。 您不需要从“c:\ MyProject \ FilesToUpload \ test.txt”获取文件,但您需要将“test.txt”的“Copy to Output Directory”属性更改为“Copy Always”。 文件属性


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接