C# 如何在配置文件中放置Windows特殊文件夹
在我的c#应用程序中,我有一个自定义配置部分来确定在何处存储和检索某些文件。但是,默认位置是在c:\ProgramData目录中,我们使用C# 如何在配置文件中放置Windows特殊文件夹,c#,.net,C#,.net,在我的c#应用程序中,我有一个自定义配置部分来确定在何处存储和检索某些文件。但是,默认位置是在c:\ProgramData目录中,我们使用 Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); 如何在配置文件中预填充该目录,而不必写出原始字符串?在某些情况下,它也可能是一个不同的特殊文件夹 基本上,它是一个配置元素,看起来像: <searchpath path="" priority=""
Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
如何在配置文件中预填充该目录,而不必写出原始字符串?在某些情况下,它也可能是一个不同的特殊文件夹
基本上,它是一个配置元素,看起来像:
<searchpath path="" priority="" isfullpath=""/>
其中的每一个都是搜索产品配置文件的路径,但是在不同版本的过程中,目录被移动了,但是为了向后兼容,如果在较新的路径中找不到,我仍然需要搜索较旧的路径
例如,我必须先搜索产品安装目录,然后搜索ProgramData目录,因为我们的最新版本将其移动到当前产品安装目录中,但我们的旧版本将其存储在ProgramData目录中。好的,因此,一种方法可能是在
app.config
中添加
部分:
<appSettings>
<add key="programData" value="" />
</appSettings>
现在,当您需要路径时,只需执行以下操作:
var path = ProgramData.Path
现在,如果其中有一个属性并且它有一个值,它将使用该值。否则,它将默认为SpecialFolder
还有一个注意事项,您需要添加对系统配置的引用
如何:
//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);
});
您可以使用%%在路径中指定特殊文件夹,或将该值用作普通路径。因此您是说您更愿意从配置文件中提取该值,但它可能会被覆盖(即手动设置)?是否要存储不同的
SpecialFolder
s或自定义路径或SpecialFolder
和用户定义路径的组合?正确。现在我只是把它们硬编码在课堂上,但我厌倦了每次都要进去修改代码。它可以是特殊文件夹和用户定义的路径。我已经用更多信息更新了问题。谢谢这为我提供了最大的灵活性。我会使用这种方法,但是我不需要使用正则表达式和解析枚举,而只需要调用(您可以使用它获取SpecialFolder.CommonApplicationData
)很好!我喜欢这样@斯科特森伯伦
//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);
});