如何在不定义路径的情况下读取现有文本文件

Vil*_*ius 34 .net c# file-io text

大多数示例显示了如何从确切位置读取文本文件(fe"C:\ Users\Owner\Documents\test1.txt").但是,如何在不写完整路径的情况下读取文本文件,因此我的代码在复制到其他计算机时可以正常工作.使用visual studio,我在项目(控制台项目)中添加了2个文本文件,并且不知道阅读这些文件的最佳方法.希望我能清楚地描述我的问题.也许我需要不同地添加这些txt文件(比如直接与.exe文件相同的文件夹)?

Dar*_*ren 47

你可以使用Directory.GetCurrentDirectory:

var path = Path.Combine(Directory.GetCurrentDirectory(), "\\fileName.txt");
Run Code Online (Sandbox Code Playgroud)

这将fileName.txt在应用程序的当前目录中查找该文件.

  • [`Directory.GetCurrentDirectory()`](http://msdn.microsoft.com/en-us/library/system.io.directory.getcurrentdirectory.aspx)返回_"包含当前工作目录路径的字符串,并且不以反斜杠(\\)"_结尾.使用`Path.Combine()`而不是字符串连接. (8认同)
  • 就我而言,需要删除文件名部分的前导反斜杠。它应该是这样的: var path = Path.Combine(Directory.GetCurrentDirectory(), "fileName.txt"); 否则,结果将是非预期的“\\fileName.txt”。这是在 VS 2015 上测试的。 (5认同)
  • 它适用于当前驱动器的目录而不是应用程序的目录 (3认同)
  • 对于控制台应用程序,工作目录通常与包含可执行文件的目录不同.为什么与程序关联的这两个文本文件位于那里? (2认同)
  • @DarrenDavies不会亲自考虑。这是对我有用的`System.AppDomain.CurrentDomain.BaseDirectory`,这是因为我的应用程序不是控制台..您可以编辑答案,以便删除不赞成票,我只是注意到OP正在询问有关控制台应用程序。 (2认同)
  • @ RansomAni-Gizzle - 该解决方案确实有效并满足OP的要求,因此它是可接受的答案.我建议你学习并尊重其他社区成员,并在你再次向我投票之前阅读实际问过的问题. (2认同)

AXM*_*MIM 22

如果您的应用程序是Web服务,Directory.CurrentDirectory则不起作用.

请System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory.ToString(), "yourFileName.txt"))改用.

  • 是的。`Directory.CurrentDirectory` 将是 `C:\Program Files (x86)\IIS Express` (2认同)

Dan*_*Dan 11

提供路径时,它可以是绝对的/有根的,也可以是相对的.如果提供相对路径,则将通过获取正在运行的进程的工作目录来解析它.

例:

string text = File.ReadAllText("Some\\Path.txt"); // relative path
Run Code Online (Sandbox Code Playgroud)

上面的代码与以下代码具有相同的效果:

string text = File.ReadAllText(
    Path.Combine(Environment.CurrentDirectory, "Some\\Path.txt"));
Run Code Online (Sandbox Code Playgroud)

如果您的文件始终位于与应用程序相同的位置,则只需包含它们的相对路径,它们应在不同的计算机上正确解析.