【问题标题】:How do i get right the directory of my application? [duplicate]我如何获得正确的应用程序目录? [复制]
【发布时间】:2017-12-04 11:06:33
【问题描述】:

我制作了一个小型控制台应用程序(第一次在 c# 中发布)。但我不能使用我的资源文件。我用textfiles可以给它。当我使用调试目录时它工作了

我的目标是创建一个这样的目录: 应用地图 + 应用程序.exe + 设置 资源图 + 配置.txt 记录器 + .

现在,如果我尝试访问它发送给我的配置文件: C:\Users\<username> \AppData\Local\Apps\2.0\D01L7N51.9EW\R7HB7NAB.B7Y \sele..tion_0000000000000000_0001.0000_92af5262ce6f49d8

虽然我期待C:/Users/&lt;username&gt;/ Documents/&lt;application&gt;/ + resources/config.txt

我试过了

string dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
Console.WriteLine(dir);

&&

Path.GetDirectoryName(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));

&&

Console.WriteLine(Directory.GetCurrentDirectory());

但我总是在 appdata 地图上结束。

【问题讨论】:

  • 您的应用程序从哪里运行(哪个文件夹)?
  • @mjwills 该应用程序已发布到 mydocuments 地图中,但我希望可以将其放置在任何地方,以便访问我尝试访问应用程序文件夹的 txt 文件。我认为它在某个地方的 appdata 文件夹中“运行”。 (我还没有 c# 发布的经验)。我不知道我是否可以,或者如何改变它。

标签: c# console directory publish appdata


【解决方案1】:

您可以简单地使用Application.StartupPath (reference),但结果将始终取决于您放置/安装可执行文件的位置

如果您总是想指向当前用户的 Documents 文件夹(在操作系统中注册为特殊文件夹),就像在您的示例中一样,您可以使用:

String path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

或(但风险自负,因为它的安全性要低得多):

String path = Path.Combine(Environment.ExpandEnvironmentVariables("%userprofile%"), "Documents");

使用第一种或第二种方法检索到正确的Documents 文件夹路径后,将其与最后一部分结合起来:

path = Path.Combine(path, "resources/config.txt");

有关这两种方法的更多信息:

【讨论】:

  • Application.StartupPath 仅适用于表单应用程序:/ 不适用于控制台。其他选项非常有帮助,谢谢。我想让应用程序易于访问(因为用户需要提供 txt 文件。)所以使用这些代码是可能的,但我认为如果我能让用户将 txt 配置文件放在应用程序文件夹(以便他们可以将其移动到任何地方(桌面/文档/子文件夹等)
  • 我认为第一个选项是最好的。很高兴能提供帮助。如果您认为我的回答解决了您的问题,请将其标记为已接受!谢谢!
【解决方案2】:

怎么样:

System.IO.Path.GetDirectoryName(Application.ExecutablePath);

【讨论】:

  • ExecutablePath 不适用于控制台应用程序 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-18
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
  • 2021-01-24
相关资源
最近更新 更多