Search code examples
c#.netdirectoryspecial-folders

Parsing string containing Special Folder


I've allowed for custom paths to be entered and wanted the default to be something along the lines of: %UserProfile%/Documents/foo, of course this needs to successfully parse the string and though it will work in Windows Explorer, I was wondering if I'm missing a library call or option for parsing this correctly.

DirectoryInfo's constructor certainly doesn't work, treating %UserProfile% like any other folder name. If there is no good way, I'll manually parse it to substitute %foo% with the actual special folder location if it is in the Special Folders Enumeration.

Edit: Code that does what I'm looking for (though would prefer a proper .NET library call):

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

Solution

  • Use Environment.ExpandEnvironmentVariables on the path before using it.

    var pathWithEnv = @"%UserProfile%/Documents/foo";
    var path = Environment.ExpandEnvironmentVariables(pathWithEnv);
    // your code...