0

我的确切文件路径如下。此 .txt 文件不应部署到 bin/debug

string str = File.ReadAllText(@"C:\development\slnfolder\projfolder\myfile.txt");

如何编写代码,这样我就不必硬编码完整路径来获取文件

我试图避免上述代码行中的硬编码路径,如下所示:

string file = @"myfile.txt";
string str = Path.GetFullPath(file);

但 str 最终如下并且无法找到该文件。

C:\development\slnfolder\projfolder\bin\debug\myfile.txt

4

4 回答 4

2

您可以包含myfile.txt在您的 Visual Studio 解决方案中并转到其属性并将构建操作设置为始终复制(或者如果您想避免复制自上次构建以来没有更改的文件,则复制如果较新...)。

这样,您将在目标目录(即bin\debug)中拥有整个文件。

于 2013-01-14T19:26:45.907 回答
1

那是它应该映射的地方,因为那是你的可执行文件运行的地方。我强烈建议您确保将文本文件移动到bin/debug文件夹中(有一个 VS 选项可以将其复制到属性中),而不是尝试向上读取两个级别。一旦您最终部署您的应用程序而不是从 Visual Studio 运行它,这将容易得多。

于 2013-01-14T19:26:08.450 回答
1

如果您使用的是 Visual Studio,则将 txt 文件添加到您的项目中

  • 右键单击属性
  • 将构建操作设置为
  • 并将副本设置为输出目录以复制如果较新

这将确保 txt 文件始终与可执行文件位于同一文件夹中

于 2013-01-14T19:26:57.667 回答
1

为避免对某些内容进行硬编码,您应该:

  • “软编码”它(即使其成为产品配置的一部分)。您可以为此使用配置设置 API
  • 将其作为命令行上的参数(从arg传递给Main方法的其中一个中读取目录位置),或
  • 约定它的位置,例如,在data目录中,该目录是当前运行目录的子目录(从 读取@"..\data\myfile.txt")。

您始终可以定义这些方法的组合,例如,在未指定配置/命令行选项时使用“按约定”位置。

于 2013-01-14T19:27:12.817 回答