计算相对文件路径

本文关键字:路径 文件 相对 计算 | 更新日期: 2023-09-27 18:21:48

我有两个文件:

C:'Program Files'MyApp'images'image.png
C:'Users'Steve'media.jpg

现在我想计算文件2(media.jpg)相对于文件1:的文件路径

..'..'..'Users'Steve'

.NET中是否有一个内置函数可以做到这一点?

计算相对文件路径

使用:

var s1 = @"C:'Users'Steve'media.jpg";
var s2 = @"C:'Program Files'MyApp'images'image.png";
var uri = new Uri(s2);
var result = uri.MakeRelativeUri(new Uri(s1)).ToString();

没有内置的.NET,但有本机函数。这样使用:

[DllImport("shlwapi.dll", CharSet=CharSet.Auto)]
static extern bool PathRelativePathTo(
     [Out] StringBuilder pszPath,
     [In] string pszFrom,
     [In] FileAttributes dwAttrFrom,
     [In] string pszTo,
     [In] FileAttributes dwAttrTo
);

或者,如果你仍然喜欢托管代码,那么试试这个:

    public static string GetRelativePath(FileSystemInfo path1, FileSystemInfo path2)
    {
        if (path1 == null) throw new ArgumentNullException("path1");
        if (path2 == null) throw new ArgumentNullException("path2");
        Func<FileSystemInfo, string> getFullName = delegate(FileSystemInfo path)
        {
            string fullName = path.FullName;
            if (path is DirectoryInfo)
            {
                if (fullName[fullName.Length - 1] != System.IO.Path.DirectorySeparatorChar)
                {
                    fullName += System.IO.Path.DirectorySeparatorChar;
                }
            }
            return fullName;
        };
        string path1FullName = getFullName(path1);
        string path2FullName = getFullName(path2);
        Uri uri1 = new Uri(path1FullName);
        Uri uri2 = new Uri(path2FullName);
        Uri relativeUri = uri1.MakeRelativeUri(uri2);
        return relativeUri.OriginalString;
    }