Stetic.WidgetUtils.AbsoluteToRelativePath C# (CSharp) Method

AbsoluteToRelativePath() public static method

public static AbsoluteToRelativePath ( string baseDirectoryPath, string absPath ) : string
baseDirectoryPath string
absPath string
return string
        public static string AbsoluteToRelativePath(string baseDirectoryPath, string absPath)
        {
            if (! Path.IsPathRooted (absPath))
                return absPath;

            absPath = Path.GetFullPath (absPath);
            baseDirectoryPath = Path.GetFullPath (baseDirectoryPath);

            char[] separators = { Path.DirectorySeparatorChar, Path.VolumeSeparatorChar, Path.AltDirectorySeparatorChar };
            baseDirectoryPath = baseDirectoryPath.TrimEnd (separators);
            string[] bPath = baseDirectoryPath.Split (separators);
            string[] aPath = absPath.Split (separators);
            int indx = 0;
            for(; indx < Math.Min(bPath.Length, aPath.Length); ++indx){
                if(!bPath[indx].Equals(aPath[indx]))
                    break;
            }

            if (indx == 0) {
                return absPath;
            }

            string erg = "";

            if(indx == bPath.Length) {
                erg += "." + Path.DirectorySeparatorChar;
            } else {
                for (int i = indx; i < bPath.Length; ++i) {
                    erg += ".." + Path.DirectorySeparatorChar;
                }
            }
            erg += String.Join(Path.DirectorySeparatorChar.ToString(), aPath, indx, aPath.Length-indx);

            return erg;
        }