解析包含特殊文件夹的字符串
Parsing string containing Special Folder
我允许输入自定义路径并希望默认路径为:
%UserProfile%/Documents/foo
,当然这需要成功解析字符串,虽然它可以在 Windows Explorer 中工作,但我想知道我是否缺少用于正确解析它的库调用或选项。
DirectoryInfo 的构造函数肯定不起作用,将 %UserProfile%
视为任何其他文件夹名称。
如果没有好的方法,我将手动解析它以将 %foo%
替换为实际的特殊文件夹位置(如果它在特殊文件夹枚举中)。
编辑:
实现我正在寻找的代码(尽管更喜欢适当的 .NET 库调用):
var path = @"%UserProfile%/Documents/foo";
var specialFolders = Regex.Matches(path, "%(?<possibleSpecial>.+)%");
foreach (var spec in specialFolders.AsEnumerable())
{
if (Enum.TryParse<Environment.SpecialFolder>(spec.Groups["possibleSpecial"].Value, out var sf))
{
path = Regex.Replace(path, spec.Value, Environment.GetFolderPath(sf));
}
}
在使用之前先在路径上使用Environment.ExpandEnvironmentVariables
。
var pathWithEnv = @"%UserProfile%/Documents/foo";
var path = Environment.ExpandEnvironmentVariables(pathWithEnv);
// your code...
我允许输入自定义路径并希望默认路径为:
%UserProfile%/Documents/foo
,当然这需要成功解析字符串,虽然它可以在 Windows Explorer 中工作,但我想知道我是否缺少用于正确解析它的库调用或选项。
DirectoryInfo 的构造函数肯定不起作用,将 %UserProfile%
视为任何其他文件夹名称。
如果没有好的方法,我将手动解析它以将 %foo%
替换为实际的特殊文件夹位置(如果它在特殊文件夹枚举中)。
编辑: 实现我正在寻找的代码(尽管更喜欢适当的 .NET 库调用):
var path = @"%UserProfile%/Documents/foo";
var specialFolders = Regex.Matches(path, "%(?<possibleSpecial>.+)%");
foreach (var spec in specialFolders.AsEnumerable())
{
if (Enum.TryParse<Environment.SpecialFolder>(spec.Groups["possibleSpecial"].Value, out var sf))
{
path = Regex.Replace(path, spec.Value, Environment.GetFolderPath(sf));
}
}
在使用之前先在路径上使用Environment.ExpandEnvironmentVariables
。
var pathWithEnv = @"%UserProfile%/Documents/foo";
var path = Environment.ExpandEnvironmentVariables(pathWithEnv);
// your code...