获取资源文件夹路径 c#

本文关键字:路径 文件夹 资源 获取 | 更新日期: 2023-09-27 18:32:22

我在项目中拥有的一些资源很好,使用字符串路径工作正常,但是如果我将项目移动到另一个目录或另一台计算机,它将停止工作。

请我需要在字符串变量中获取项目资源文件夹的路径,

像这样的东西

C:'Users'User1'Documents'<projects folder>'<project name>'Resources'

提前谢谢。

获取资源文件夹路径 c#

如果您知道相对于应用程序运行位置的路径,则可以执行以下操作。首先,获取应用的运行路径:

string RunningPath = AppDomain.CurrentDomain.BaseDirectory;

然后,使用如下所示的内容导航到相对路径:

string FileName = string.Format("{0}Resources''file.txt", Path.GetFullPath(Path.Combine(RunningPath, @"..'..'")));

在此示例中,我的"资源"文件夹位于正在运行的目录的两个目录上。

我还应该提到,如果您的资源包含在项目中,您应该能够使用以下方法获取它:

System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();

这将返回资源数组。

如果文件存储在项目文件夹中,则可以使用 System.AppDomain.CurrentDomain.BaseDirectory .此语句检索有关应用程序安装位置的路径。单击此处获取有关此内容的详细说明。

这可能不是最干净的方式,但它对我很有用。

如果你有一个这样的结构:

C:'...'MyApp'app.exe
C:'...'MyApp'ConfigFiles'MyConfig.xml

该代码将返回相对于正在运行的程序集的路径。

GetPath("ConfigFiles/MyConfig.xml") // returns the full path to MyConfig.xml
private string GetPath(string relativePath)
{
    var appPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
    string pattern = @"^(.+'')(.+exe)$";
    Regex regex = new Regex(pattern, RegexOptions.None);
    var match = regex.Match(appPath);
    return System.IO.Path.GetFullPath(match.Groups[1].Value + relativePath);
}

你可以尝试使用 |数据目录|记录在这里。

这是一篇旧Microsoft文章中对它如何工作的描述

以前很难处理数据库文件的原因之一 是数据库的完整路径在不同的 地方。这使得共享项目和部署 应用。在此版本中,.NET 运行时添加了对以下内容的支持 我们调用 DataDirectory 宏。这允许Visual Studio放置一个 连接字符串中将在 运行时。因此,而不是像这样使用连接字符串:

  "Data Source=.'SQLExpress;AttachDbFileName=c:'program files'app'data.mdf"

可以有如下所示的连接字符串:

  "Data Source=.'SQLExpress;AttachDbFileName=|DataDirectory|'data.mdf"

SqlClient 和 OleDb 支持此连接字符串语法 托管提供程序。

默认情况下,|数据目录|变量将扩展如下:

  - For applications placed in a directory on the user machine, this will be the app's (.exe) folder.
  - For apps running under ClickOnce, this will be a special data folder created by ClickOnce
  - For Web apps, this will be the App_Data folder