An Improved Path.Combine to Handle Relative Paths and ~’s

Recently I was working with parsing a .Resx file which stored file locations as relative locations (i.e. ..\..\..\Images\Logo.jpg ) and found that path combine does not work with such. I have often wished Path.Combine(DirectoryInfo, string) was valid but because Path is static I could not extend it. I ended up writing a short utility below which handles more variations than Path.Combine.

 

/// <summary>
/// A utility to resolve ..\ in the relative path
/// </summary>/// <param name="directory">Directory Information on the base </param>
/// <param name="relativePath">The dotted relative path</param>
/// <returns></returns>
public static string CombinePath(DirectoryInfo directory, string relativePath)
{
    while (relativePath.StartsWith(@"..\"))
    {
        relativePath = relativePath.Substring(3);
        directory = directory.Parent;
    }
    if (relativePath.StartsWith(@"~"))
    {
        if (System.Web.HttpContext.Current == null)
        {
            //An intelligent guess of the intent     
            relativePath = relativePath.Substring(1);
        }
        else
        {
            return System.Web.HttpContext.Current.Server.MapPath(relativePath);
        }
    }
    return Path.Combine(directory.FullName, relativePath);
}

public static string CombinePath(string directory, string relativePath)
{ return CombinePath(new DirectoryInfo(directory), relativPath); }

Comments

Popular posts from this blog

Yet once more into the breech (of altered programming logic)

Simple WP7 Mango App for Background Tasks, Toast, and Tiles: Code Explanation

How to convert SVG data to a Png Image file Using InkScape