C # 'da mutlak yola bağıl yol?


86

Görüntülere giden href dosya yollarını içeren xml dosyalarım var (örneğin, ".... \ images \ image.jpg"). Href'ler göreceli yollar içerir. Şimdi, href'leri görüntülere çıkarmam ve bunları dosya sisteminde mutlak yollara dönüştürmem gerekiyor.

GetFullPath yöntemini biliyorum, ancak denedim ve yalnızca CurrentDirectory kümesinden çalışıyor gibi görünüyor, bu C: gibi görünüyor, bu yüzden bunu nasıl kullanabileceğimi anlamıyorum. Ve yine de, href'leri içeren dosyanın mutlak yoluna ve href göreceli yollara sahibim, bu yüzden benim için mutlak yoluna bağlı olarak ".... \" parçalarının sayısını geri saymak basit bir görev olduğundan içerdiği dosya, bunu programlı olarak da yapmanın bir yolu olmalı gibi görünüyor.

Umarım bilmediğim basit bir yöntem vardır! Herhangi bir fikir?


2
Bu bir masaüstü veya web uygulaması mı?
Chris Kooken

Yanıtlar:


106

XML dosyasının bulunduğu gerçek dizini bildiğinizi varsayarsak Path.Combine kullanın, örn.

var absolute_path = Path.Combine(directoryXmlLivesIn, "..\images\image.jpg");

Herhangi bir .. 'nin daraltılmış haliyle tam yolu geri almak istiyorsanız, şunu kullanabilirsiniz:

Path.GetFullPath((new Uri(absolute_path)).LocalPath);

1
Teşekkürler, sorunum görünüşe göre ilk önce xml dosyasının dizinini almayı unutmuş olmamdı, Combine'ı denemiştim, ancak dosyanın mutlak yolu işe yaramadı. Tüm bu cevaplardan hangisinin önce olduğunu bilmiyorum, zaman aynı görünüyor, ama dizini almak için işaret ettiniz, bu yüzden cevabınızı seçtim. Yine de teşekkürler!
Anders

10
Biraz deneyle (new Uri(absolute_path)).LocalPath, Path.GetFullPath(absolute_path)birinin veya diğerinin yeterli olması gerektiği gibi aynı şeyi yapan görünür .
Tim Lewis

1
Uri'nin yolları ve dosya adlarını işlerken istemediğiniz "#" veya "&" özel işlemine sahip olduğuna dikkat edin!
MatsW

1
@MatsW: docs.microsoft.com/en-us/dotnet/api/system.uri.localpathGets a local operating-system representation of a file name. , bu durumda özel bir işlem beklenmeyeceğini belirtir .
FrankM

144
string exactPath = Path.GetFullPath(yourRelativePath);

İşler


14
bu, 'Göreli bir yolu nasıl mutlak bir yola dönüştürürsünüz?' sorusunun doğru cevabıdır. OP, sadece 'yol parçalarına nasıl bağlı kalırsınız?' sorusunun cevabını öğrenmek istedi.
JonnyRaa

2
İlk başta bunun işe yaramadığını düşündüm, ama işe yarıyor. Göreceli C: \ test \ A \ .. \ B \ test.txt
yolunu beslerseniz

34

Bu işe yaradı.

var s = Path.Combine(@"C:\some\location", @"..\other\file.txt");
s = Path.GetFullPath(s);

9

Göreceli yolu mutlak yola dönüştürmenin en iyi yolu budur!

string absolutePath = System.IO.Path.GetFullPath(relativePath);

6

Path.Combine'ı "temel" yolla, ardından sonuçlarda GetFullPath ile kullanabilirsiniz.

string absPathContainingHrefs = GetAbsolutePath(); // Get the "base" path
string fullPath = Path.Combine(absPathContainingHrefs, @"..\..\images\image.jpg");
fullPath = Path.GetFullPath(fullPath);  // Will turn the above into a proper abs path

5

Server.MapPathYöntemi denediniz mi? İşte bir örnek

string relative_path = "/Content/img/Upload/Reports/59/44A0446_59-1.jpg";
string absolute_path = Server.MapPath(relative_path);
//will be c:\users\.....\Content\img\Upload\Reports\59\44A0446_59-1.jpg

1

Bu benim için çalıştı.

//used in an ASP.NET MVC app
private const string BatchFilePath = "/MyBatchFileDirectory/Mybatchfiles.bat"; 
var batchFile = HttpContext.Current.Server.MapPath(BatchFilePath);

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.