【问题标题】:File.ReadLines path relative to application executable?File.ReadLines 相对于应用程序可执行文件的路径?
【发布时间】:2014-04-04 00:50:50
【问题描述】:

我正在读取和写入一些文本文件,并且我目前正在使用设置的路径。如何更改该设置路径以使用可执行文件所在的同一文件夹?

例如:

File.ReadLines(@"D:\Users\MyUserName\Desktop\MyApplication\names.txt").Skip(1).ToList();

还有……

File.WriteAllLines(@"D:\Users\MyUserName\Desktop\MyApplication\names.txt", lines);

还有……

using (StreamWriter writer = new StreamWriter(@"D:\Users\MyUserName\Desktop\MyApplication\names.txt", true))
{
    writer.WriteLine(myText);
}

在 IDE (Visual Studio) 中测试时也需要工作。

【问题讨论】:

  • 使用文件名即可。工作目录始终是可执行目录。
  • @SimonWhitehead:这根本不是真的。如果您从其他目录运行“c:\foo\program.exe”,则当前工作目录将是您所在的目录,not "c:\foo\"。

标签: c# file filepath streamreader streamwriter


【解决方案1】:

路径是相对于当前工作目录的。在 IDE 中运行时,这将是可执行文件所在的目录。否则,它通常是您启动程序的目录。

因此,如果您的当前目录(在命令行上)是 C:\foo,并且您输入命令“C:\bar\myprogram.exe”,您的程序将在 C:\foo 中启动,如果您尝试打开文件“fooby.txt”,它将寻找“C:\foo\fooby.txt”。

有关如何获取可执行文件路径的信息,请参阅How do I get the name of the current executable in C#?

【讨论】:

    【解决方案2】:
    Assembly.GetEntryAssembly().Location
    

    如果您使用的是 winforms 应用程序,则可以使用

    System.Windows.Forms.Application.StartupPath
    

    默认情况下,它会像@JimMischel 所说的那样指向当前目录。

    所以最好避免只使用像 File.ReadLines("names.txt"); 这样的文件名,而是提供完整的文件路径。

    【讨论】:

    • File.ReadLines("names.txt") 不一定会从包含 .exe 的目录中读取。它将从当前工作目录中读取。
    【解决方案3】:

    也可以使用Environment.CurrentDirectory获取当前应用文件夹 查看LINK了解更多详情

    【讨论】:

    • CurrentDirectory 是不同的检查 Jim 的回答
    猜你喜欢
    • 2012-02-26
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 2012-07-21
    • 2013-12-20
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多