Bulduğum hiçbir şey bunu gerçekten normalleştirilmiş bir şekilde çözmeye yardımcı olmadığına göre, işte başka bir cevap.
Benzer sorulara verilen bazı yanıtların Uri
türü kullanmaya çalıştığını , ancak bunun sondaki eğik çizgilerle ve sondaki eğik çizgilerle mücadele ettiğini unutmayın.
Benim diğer cevabı bu sayfada işe dosya sistemi koymak işlemleri için çalışır, ancak biz dosya sistemi geçmeden, şu anda (örneğin karşılaştırma nedenlerle gibi) çözülmesi yolu olmasını istiyorsanız, eğer C:/Temp/..
ve C:/
farklı kabul edilir. Dosya sisteminden geçmeden, bu şekilde gezinmek bize normalleştirilmiş, uygun şekilde karşılaştırılabilir bir yol sağlamaz.
Ne yapabiliriz?
Aşağıdaki keşif üzerine inşa edeceğiz:
Path.GetDirectoryName(path + "/") ?? ""
olacak güvenilir bize bir dizin yolu vermek bir bölü çizgisi .
- Eğik çizgi ekleme (aynı
string
, değil olarak char
) bir tedavi edecek null
o davranır olarak yolu aynı ""
.
GetDirectoryName
eklenen eğik çizgi sayesinde son yol bileşenini atmaktan kaçınacaktır.
GetDirectoryName
eğik çizgileri ve gezinme noktalarını normalleştirir.
- Bu, sondaki eğik çizgilerin kaldırılmasını içerir.
- Bu,
..
yukarı gezinerek daraltmayı içerir .
GetDirectoryName
null
birleştiğimiz boş bir yola döneceğiz ""
.
Bunu nasıl kullanıyoruz?
İlk olarak, giriş yolunu normalleştirin :
dirPath = Path.GetDirectoryName(dirPath + "/") ?? "";
Daha sonra, üst dizini alabiliriz ve bu işlemi daha ileri gitmek için istediğiniz kadar tekrar edebiliriz:
path = Path.GetDirectoryName(path);
Dosya sistemine asla dokunmadığımızı unutmayın. Kullanmış olacağımız gibi, yolun hiçbir parçasının var olması gerekmez DirectoryInfo
.