我有一个绝对文件夹路径和文件路径,如下所示:
C:BaseDir
-基文件夹
C:BaseDirsub123.txt
- 位于基文件夹中的文件的路径(但也可能具有某些子文件夹(
文件路径的另一个示例:C:BaseDirfile.docx
或C:BaseDirsubsub1file.exe
我需要根据基本文件夹将文件的路径从绝对转换为相对。结果应如下所示:sub123.txt
;file.docx
;subsub1file.exe
请注意,我不想BaseDir
路径。解决方案还应适用于网络文件夹(\Server1BaseDirfile.docx
或\172.31.1.60BaseDirsub123.txt
(。
是否有任何内置类可以执行此操作?
Credits 去做这篇文章: 绝对到相对路径
public static string AbsoluteToRelativePath(string pathToFile, string referencePath)
{
var fileUri = new Uri(pathToFile);
var referenceUri = new Uri(referencePath);
return referenceUri.MakeRelativeUri(fileUri).ToString();
}
现在你可以像这样使用它
var result = AbsoluteToRelativePath(@"C:dirpathtofile.txt", @"C:dir");
您可以使用MakeRelativeUri
方法:
var basePath = @"C:BaseDir";
var path = @"C:BaseDirsubfile.docx";
var result = new Uri(basePath).MakeRelativeUri(new Uri(path));
Console.WriteLine(Uri.UnescapeDataString(result.ToString()));
使用 .NET Core 2 或更高版本时,还有另一种选择:
var basePath = @"C:BaseDir";
var path = @"C:BaseDirsubfile.docx";
var relative = Path.GetRelativePath(basePath, path);
Uri
的区别(可能是一个优势(是,路径不会被逃脱。当使用Uri
时,空格被%20
等替换。