在我的c#应用程序中,我有一个自定义配置部分来确定存储和检索某些文件的位置。但是,这些的默认位置在c:\ ProgramData目录中,我们使用
访问它Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
如何在配置文件中预填充该目录而不必写出原始字符串?在某些情况下,它也可能是一个不同的特殊文件夹。
基本上它是一个配置元素,如下所示:
<searchpath path="" priority="" isfullpath=""/>
其中每一个都是搜索产品配置配置文件的路径,但是在不同版本的过程中,该目录已被移动,但为了向后兼容,我仍然需要搜索旧路径,如果我找不到他们在新的道路上。
例如,我现在必须在产品安装目录中搜索ProgramData目录,因为我们最新版本将其移动到当前产品安装目录中,但我们的旧版本将其存储在ProgramData目录中。
答案 0 :(得分: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);
});
您可以使用%%在路径中指定特殊文件夹,或将该值用作普通路径。
答案 1 :(得分: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
的引用。