程式碼轉載自 Deep Brain Studio
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
private string RelativePath( string absolutePath, string relativeTo) { string [] absoluteDirectories = absolutePath.Split( '\\' ); string [] relativeDirectories = relativeTo.Split( '\\' ); //Get the shortest of the two paths int length = absoluteDirectories.Length < relativeDirectories.Length ? absoluteDirectories.Length : relativeDirectories.Length; //Use to determine where in the loop we exited int lastCommonRoot = -1; int index; //Find common root for (index = 0; index < length; index++) if (absoluteDirectories[index] == relativeDirectories[index]) lastCommonRoot = index; else break ; //If we didn't find a common prefix then throw if (lastCommonRoot == -1) throw new ArgumentException( "Paths do not have a common base" ); //Build up the relative path StringBuilder relativePath = new StringBuilder(); //Add on the .. for (index = lastCommonRoot + 1; index < absoluteDirectories.Length; index++) if (absoluteDirectories[index].Length > 0) relativePath.Append( "..\\" ); //Add on the folders for (index = lastCommonRoot + 1; index < relativeDirectories.Length - 1; index++) relativePath.Append(relativeDirectories[index] + "\\" ); relativePath.Append(relativeDirectories[relativeDirectories.Length - 1]); return relativePath.ToString(); } |
不過遇到不同磁碟時就會 throw exception~最好是可以事先作別的處理避免這個問題。
沒有留言:
張貼留言