我正在编写一个控制台实用程序,以对命令行上指定的文件进行一些处理,但是遇到了无法通过Google / Stack Overflow解决的问题。如果指定了完整路径(包括驱动器号),如何重新格式化该路径以使其相对于当前工作目录?
一定有类似于VirtualPathUtility.MakeRelative函数的东西,但是如果有的话,那使我难以理解。
如果您不介意斜杠被切换,则可以[ab]使用Uri:
Uri
Uri file = new Uri(@"c:\foo\bar\blop\blap.txt"); // Must end in a slash to indicate folder Uri folder = new Uri(@"c:\foo\bar\"); string relativePath = Uri.UnescapeDataString( folder.MakeRelativeUri(file) .ToString() .Replace('/', Path.DirectorySeparatorChar) );
string GetRelativePath(string filespec, string folder) { Uri pathUri = new Uri(filespec); // Folders must end in a slash if (!folder.EndsWith(Path.DirectorySeparatorChar.ToString())) { folder += Path.DirectorySeparatorChar; } Uri folderUri = new Uri(folder); return Uri.UnescapeDataString(folderUri.MakeRelativeUri(pathUri).ToString().Replace('/', Path.DirectorySeparatorChar)); }