5

在我的 c# 应用程序中,我有一个自定义配置部分来确定在哪里存储和检索某些文件。然而,它们的默认位置在 c:\ProgramData 目录中,我们使用

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);

如何在我的配置文件中预填充该目录而不必写出原始字符串?在某些情况下,它也可能是不同的特殊文件夹。

基本上它是一个配置元素,如下所示:

<searchpath path="" priority="" isfullpath=""/>

其中每一个都是搜索产品配置文件的路径,但是在不同版本的过程中,该目录已被移动,但为了向后兼容,如果我在较新的路径。

例如,我现在必须在产品安装目录中搜索 ProgramData 目录,因为我们的最新版本将其移动到当前产品安装目录中,但我们的旧版本将其存储在 ProgramData 目录中。

4

2 回答 2

5

怎么样:

  //string folderKey = ConfigurationManager.AppSettings["Folder"];
  string folderKey = "%CommonApplicationData%\\Test";
  var regex = new Regex("([%][^%]+[%])");
  string folder = regex.Replace(folderKey, (match) => {
    // get rid of %%
    string value = match.Value.Substring(1, match.Value.Length - 2);
    var specialFolder = (Environment.SpecialFolder)Enum.Parse(typeof(Environment.SpecialFolder), value, true);
    return Environment.GetFolderPath(specialFolder);
  });

您可以使用 %% 指定路径中的特殊文件夹,或使用该值作为普通路径。

于 2013-08-06T14:21:41.937 回答
1

好的,因此一种方法可能是<appSettings>在您的app.config:

<appSettings>
  <add key="programData" value="" />
</appSettings>

然后在应用程序中,构建一个用于检索路径的静态类:

public static class ProgramData
{
    private static string _path;
    public static string Path
    {
        get
        {
            if (!string.IsNullOrEmpty(_path)) { return _path; }

            // let's set it then
            _path = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
            if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["programData"]))
            {
                _path = ConfigurationManager.AppSettings["programData"];
            }
        }
    }
}

现在,当您想要路径时,您要做的就是:

var path = ProgramData.Path

现在,如果那里有一个属性并且它有一个值,它将使用它。否则它将默认为SpecialFolder.

还有一点需要注意的是,您需要添加对System.Configuration.

于 2013-08-06T14:18:07.153 回答