【问题标题】:C# relative path not start from working directoryC# 相对路径不是从工作目录开始
【发布时间】:2017-04-20 04:31:58
【问题描述】:

我有一个 C# 程序,它会从相对路径 ./report/report1.rdlc 读取文件,但有时由于未知原因它从完全不同的位置找到文件 C:\Windows\system32\report\report1.rdlc 但文件实际上位于 C:\Program Files (x86)\Application1\report\report1.rdlc程序在C:\Program Files (x86)\Application1\ 内。相对路径不是从工作目录开始的任何原因?

【问题讨论】:

  • 工作目录不需要与可执行二进制文件所在的目录相同。
  • C# program 在哪里?
  • 当程序试图在C:\Windows\system32\report\ 中找到report1.rdlc 时,您是如何启动程序的?您是否在 cmd 控制台内启动它,而里面的路径是 C:\Windows\system32\
  • 我将程序构建为 exe 文件并双击 C:\Program Files (x86)\Application1\
  • 双击.exe文件时程序有用户界面,还是只是在后台运行?如果是这样,它可以作为解释系统文件夹的 Windows 服务运行。如果是这样,您可以使用 Assembly.ExecutingAssembly.CodeBase 找到基本文件夹:msdn.microsoft.com/en-us/library/…

标签: c# filepath


【解决方案1】:

它确实从工作目录开始。但是,您不应该使用工作目录,因为如果执行特定的 IO 任务(例如,有时 打开文件 对话框或(显然)Directory.SetCurrentDirectory 方法),它可能会有所不同。相反,您应该使用AppDomain.CurrentDomain.BaseDirectory 属性来获取程序集文件所在的路径。你可以这样使用:

var relativePath = Path.Combine ("report", "report1.rdlc");
var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
var absolutePath = Path.Combine (baseDirectory, absolutePath);

现在您应该使用absolutePath 来访问该文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-08
    • 2012-08-18
    • 2018-06-04
    • 2020-11-28
    • 2019-01-27
    • 2013-07-14
    • 1970-01-01
    • 2017-10-11
    相关资源
    最近更新 更多