private static string PathDifference(string path1, string path2, bool compareCase)
{
int i;
int si = -1;
for (i = 0; (i < path1.Length) && (i < path2.Length); ++i)
{
if ((path1[i] != path2[i])
&& (compareCase
|| (char.ToLowerInvariant(path1[i])
!= char.ToLowerInvariant(path2[i]))))
{
break;
}
else if (path1[i] == '/')
{
si = i;
}
}
if (i == 0)
{
return path2;
}
if ((i == path1.Length) && (i == path2.Length))
{
return string.Empty;
}
StringBuilder relPath = new StringBuilder();
// Walk down several dirs
for (; i < path1.Length; ++i)
{
if (path1[i] == '/')
{
relPath.Append("../");
}
}
// Same path except that path1 ended with a file name and path2 didn't
if (relPath.Length == 0 && path2.Length - 1 == si)
return "./"; // Truncate the file name
return relPath.ToString() + path2.Substring(si + 1);
}