<分区>
我正在编写一个控制台实用程序来对命令行中指定的文件进行一些处理,但我遇到了一个无法通过 Google/Stack Overflow 解决的问题。如果指定了完整路径(包括驱动器盘符),我该如何重新格式化该路径以使其相对于当前工作目录?
一定有类似于 VirtualPathUtility.MakeRelative 函数的东西,但如果有的话,它让我望而却步。
<分区>
我正在编写一个控制台实用程序来对命令行中指定的文件进行一些处理,但我遇到了一个无法通过 Google/Stack Overflow 解决的问题。如果指定了完整路径(包括驱动器盘符),我该如何重新格式化该路径以使其相对于当前工作目录?
一定有类似于 VirtualPathUtility.MakeRelative 函数的东西,但如果有的话,它让我望而却步。
最佳答案
如果您不介意切换斜线,您可以[滥用]使用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));
}
关于c# - 获取相对于当前工作目录的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/703281/