Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在配置文件中放置Windows特殊文件夹_C#_.net - Fatal编程技术网

C# 如何在配置文件中放置Windows特殊文件夹

C# 如何在配置文件中放置Windows特殊文件夹,c#,.net,C#,.net,在我的c#应用程序中,我有一个自定义配置部分来确定在何处存储和检索某些文件。但是,默认位置是在c:\ProgramData目录中,我们使用 Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); 如何在配置文件中预填充该目录,而不必写出原始字符串?在某些情况下,它也可能是一个不同的特殊文件夹 基本上,它是一个配置元素,看起来像: <searchpath path="" priority=""

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

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);
  });