从完整路径获取相对路径
本文关键字:路径 获取 相对 | 更新日期: 2023-09-27 18:12:04
我必须从完整路径中获得不包括相对路径的路径,说
相对路径为C:'User'Documents'
fullpath, C: '用户文档' '测试' Folder2 ' test.pdf
我想只得到相对路径后的路径,即'Test'Folder2' Test .pdf
我怎样才能做到这一点。
我使用c#作为编程语言
你不是在谈论相对的,所以我将称之为部分路径。如果你能确定部分路径是你的完整路径的一部分,它是一个简单的字符串操作:
string fullPath = @"C:'User'Documents'Test'Folder2'test.pdf";
string partialPath = @"C:'User'Documents'";
string resultingPath = fullPath.Substring(partialPath.Length);
这需要一些错误检查-当fullPath或partialPath为空或两个路径的长度相同时,它将失败
嗯,但是如果情况不同呢?或者其中一个路径使用简短的文件夹名称?更完整的解决方案是……
public static string GetRelativePath(string fullPath, string containingFolder,
bool mustBeInContainingFolder = false)
{
var file = new Uri(fullPath);
if (containingFolder[containingFolder.Length - 1] != Path.DirectorySeparatorChar)
containingFolder += Path.DirectorySeparatorChar;
var folder = new Uri(containingFolder); // Must end in a slash to indicate folder
var relativePath =
Uri.UnescapeDataString(
folder.MakeRelativeUri(file)
.ToString()
.Replace('/', Path.DirectorySeparatorChar)
);
if (mustBeInContainingFolder && relativePath.IndexOf("..") == 0)
return null;
return relativePath;
}
要展开Jan的回答,您可以在string
类(或者您想要的Path
类)上创建一个扩展方法,例如:
namespace ExtensionMethods
{
public static class MyExtensions
{
public static string GetPartialPath(this string fullPath, string partialPath)
{
return fullPath.Substring(partialPath.Length)
}
}
}
然后使用:
using ExtensionMethods;
string resultingPath = string.GetPartialPath(partialPath);
我还没有测试过这个扩展方法是否有效,但它应该可以。