【问题标题】:Relative Path - Visual Studio - C# [closed]相对路径 - Visual Studio - C# [关闭]
【发布时间】:2016-12-13 17:58:15
【问题描述】:

在 App.config 中,我在解决方案文件夹下为我的文件提供了这个相对路径。我在 Web 应用程序中使用此相对路径。

value="..\filename.log"/> 

&也尝试过

value="~/filename.log"/> 

但没有成功,我调试了代码,才知道它正在尝试在此路径中查找文件

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE..

解决方案

当它是一个 Web 应用程序时,确保 ~ 不适用于相对路径。因此,如果您想在 Web 应用程序中提供相对路径,请使用以下代码。

string logFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ConfigurationManager.AppSettings["LogFile"]);

这里的“LogFile”是值“filename.log”的键

【问题讨论】:

  • 应该是~/
  • 如果值在 app.config 文件中,则它不是 Web 应用程序,您不能使用波浪号语法。
  • 请编辑您的标题,使其不仅仅是不同顺序的标签。请参阅How to Ask 了解更多关于一个好的问题(和标题)应该包含什么的信息。
  • “它试图在安装 VS 的路径中找到这个文件” - 不,它没有。展示您的应用程序如何读取此值、如何使用它以及您是如何得出该结论的。

标签: c# visual-studio relative-path


【解决方案1】:

如果你需要找到一个与执行代码相关的文件夹,你可以使用类似

var location = System.Reflection.Assembly.GetExecutingAssembly().Location;

...获取执行代码的当前位置。然后您可以通过这种方式获取文件夹:

var directory = System.IO.Path.GetDirectoryName(location);

您可以使用Path.Combine 附加相对路径:

var location = System.Reflection.Assembly.GetExecutingAssembly().Location;
var directory = System.IO.Path.GetDirectoryName(location);
var path = System.IO.Path.Combine(directory, "..\filename.log");

...这将产生一个绝对路径。

【讨论】:

  • 这是他的 app.config,它基本上是一个 XML,你不能在其中运行 C#
  • ^ 什么?吴先生的回答很好,他知道这是一个App.config文件。 app.config 文件不会更改。他的意思是在代码中使用这个相对路径的方式,基本上就是把它转换成绝对路径。虽然,他也表示使用相对路径不是一个好主意,我强烈反对,但显然在许多场景中使用它是正确的。
  • 如果这不是 c# 问题,请从帖子中删除 c# 标签。我调整了答案以删除自以为是的部分。
【解决方案2】:

在您的配置文件中使用~/ 访问目录

value="~/filename.log"/>

您可以使用System.Environment.CurrentDirectorySystem.IO.Directory.GetCurrentDirectory() 获取当前解决方案目录(工作目录)。因此,您可以直接在代码中使用它来访问该日志文件。

String path = System.IO.Directory.GetCurrentDirectory()+"/filename.log";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    相关资源
    最近更新 更多