避免在ReadAllText中使用硬编码路径

时间:2013-01-14 19:23:16

标签: c#

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

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

如何编写代码,以便我不必硬编码完整路径来访问文件

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

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

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

  

C:\发展\ slnfolder \ projfolder \ BIN \调试\ myfile.txt的

4 个答案:

答案 0 :(得分:2)

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

这样你就可以将整个文件放在目标目录中(即bin\debug)。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

  • 右键点击属性
  • 将构建操作设置为
  • 并将复制到输出目录设置为复制如果更新

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

答案 3 :(得分:1)

为避免硬编码,您应该:

  • “软代码”(即将其作为产品配置的一部分)。您可以使用Configuration Settings APIs
  • 将其作为命令行中的参数(从传递给arg方法的Main之一读取目录位置)或
  • 制定一个关于它应该位于何处的约定,例如,在data目录中,该目录是当前运行目录的子目录(从@"..\data\myfile.txt"读取)。

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