【问题标题】:C# file path using TextReader defaults to Documents and Settings使用 TextReader 的 C# 文件路径默认为 Documents and Settings
【发布时间】:2014-06-19 14:27:34
【问题描述】:

我有一个程序作为计划任务运行了很长一段时间。我对其进行了一项更改,甚至与 TextReader 无关,并将 .exe 的副本放回服务器(Server 2003 R2 SP2)上,现在当您从计划任务运行程序时或只需双击 .exe以下行尝试从 C:\Documents and Settings\user\ 读取文件 IPAddressMonitor.ini,而不是在 .exe 位于 C:\IPAddressMonitor 的文件夹中。知道为什么吗?

TextReader tr = new StreamReader("IPAddressMonitor.ini");

【问题讨论】:

  • 您是否正在做一些可以改变当前工作目录的事情(手动或通过编码)?
  • 不是通过编码。你看到的就是我正在运行的。我是否误解了执行 .exe 的目录应该是从中提取 .ini 的目录?
  • 不知道为什么会这样,但您总是可以使用反射来获取 .exe 的路径 - 只要您的 .ini 与可执行文件位于同一文件夹中(或有些是相对的)你不会再遇到这个问题了
  • 什么设置“当前目录”?我认为它来自执行 .exe 的目录。这不正确吗?
  • 您是否在任务调度程序中为您的程序设置了路径?

标签: c# path windows-server-2003 streamreader textreader


【解决方案1】:

使用反射来获取可执行文件的路径 - 只要您的 .ini 与可执行文件位于同一文件夹中(或与之相关),您就不会再遇到此问题:

static public string AssemblyDirectory
{
    get
    {
        string codeBase = Assembly.GetExecutingAssembly().CodeBase;
        UriBuilder uri = new UriBuilder(codeBase);
        string path = Uri.UnescapeDataString(uri.Path);
        return Path.GetDirectoryName(path);
    }
}

Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)

更多信息请见this SO post

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 2010-11-09
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多