Pertanyaan Path.Combine mutlak dengan string path relatif


Saya mencoba untuk bergabung dengan jalur Windows dengan path relatif menggunakan Path.Combine.

Namun, Path.Combine(@"C:\blah",@"..\bling") kembali C:\blah\..\bling dari pada C:\bling\.

Adakah yang tahu bagaimana mencapai hal ini tanpa menulis penyelesai jalan relatif saya sendiri (yang seharusnya tidak terlalu sulit)?


76
2018-03-22 04:50


asal


Jawaban:


Pekerjaan apa:

string relativePath = "..\\bling.txt";
string baseDirectory = "C:\\blah\\";
string absolutePath = Path.GetFullPath(baseDirectory + relativePath);

(hasil: absolutePath = "C: \ bling.txt")

Apa yang tidak berhasil

string relativePath = "..\\bling.txt";
Uri baseAbsoluteUri = new Uri("C:\\blah\\");
string absolutePath = new Uri(baseAbsoluteUri, relativePath).AbsolutePath;

(hasil: absolutePath = "C: /blah/bling.txt")


54
2017-08-19 11:33



Panggil Path.GetFullPath di jalur gabungan http://msdn.microsoft.com/en-us/library/system.io.path.getfullpath.aspx

> Path.GetFullPath(Path.Combine(@"C:\blah\",@"..\bling"))
C:\bling

(Saya setuju Path.Combine harus melakukan ini sendiri)


22
2018-05-20 09:44




Path.GetFullPath(@"c:\windows\temp\..\system32")?


14
2018-03-22 05:09



Ini akan memberi Anda persis apa yang Anda butuhkan (jalur TIDAK harus ada agar ini berfungsi)

DirectoryInfo di = new DirectoryInfo(@"C:\blah\..\bling");
string cleanPath = di.FullName;

3
2017-07-17 10:31



Untuk aplikasi universal windows Path.GetFullPath() tidak tersedia, Anda dapat menggunakan System.Uri kelas sebagai gantinya:

 Uri uri = new Uri(Path.Combine(@"C:\blah\",@"..\bling"));
 Console.WriteLine(uri.LocalPath);

2
2018-05-31 20:13