2017-08-14 169 views
0

我有一个像下面的一个绝对的文件夹路径和文件路径:从基本绝对相对路径

C:\BaseDir - 基本文件夹

C:\BaseDir\sub\123.txt - 路径文件位于基础文件夹(但也许还与一些子文件夹)

文件路径的另一个例子:C:\BaseDir\file.docxC:\BaseDir\sub\sub1\file.exe

我需要基于基础文件夹将路径转换为绝对文件到相对文件。结果应该如下所示: sub\123.txt; file.docx; sub\sub1\file.exe

请注意,我不想在路径中使用BaseDir。解决方案还应该与网络文件夹(\\Server1\BaseDir\file.docx\\172.31.1.60\BaseDir\sub\123.txt)一起使用。

有没有内置的类可以做到这一点?

+0

我会尝试与子串& IndexOf –

+0

[绝对至相对路径](https:// stac koverflow.com/questions/13266756/absolute-to-relative-path) – steavy

回答

0

现金去做到这个帖子:Absolute to Relative path

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:\dir\path\to\file.txt", @"C:\dir\"); 
0

你可以使用MakeRelativeUri方法:

var basePath = @"C:\BaseDir\"; 
var path = @"C:\BaseDir\sub\file.docx"; 
var result = new Uri(basePath).MakeRelativeUri(new Uri(path)); 
Console.WriteLine(Uri.UnescapeDataString(result.ToString()));