2017-08-14 131 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()));