Dizini bir dosyanın tam yolundan nasıl alabilirim?


526

Bir dosyanın bulunduğu dizini almanın en basit yolu nedir? Bunu çalışan bir dizin ayarlamak için kullanıyorum.

string filename = @"C:\MyDirectory\MyFile.bat";

Bu örnekte, "C: \ MyDirectory" almalıyım.


3
Bu bir dizgi değişmezi değil mi? @"C:\MyDirectory\MyFile.bat"
Edgar

3
Birisi bunu yapma hakları olan bu soruyu korumak istiyor mu? 2017'den son 11 ile benzer cevap ..
Boern

Yanıtlar:


837

Kesinlikle mutlak bir yolunuz varsa kullanın Path.GetDirectoryName(path).

Yalnızca göreli bir ad alabiliyorsanız, kullanın new FileInfo(path).Directory.FullName.

Not olduğunu Pathve FileInfoher iki ad alanında bulunur System.IO.


1
Gerçekten de, GetDirectory adında bir yöntem var mı? GetDirectoryName değil mi?
Brandon

1
Directory.FullPath yerine sadece DirectoryName kullanabilirsiniz.
Steven Robbins

1
Göreceli bir isim almaya karşı prova yapıyordum. Yolun mutlak olacağını fark etmemiştim. Şimdi her iki sürümü de aldım :)
Jon Skeet

Bunu kontrol etmek için snippy kullanıyor musunuz? ;)
shahkalpesh

1
@UlyssesAlves: Her new FileInfo(path).Directory.FullNameiki durumda da çalışması gerektiğine inanıyorum .
Jon Skeet



12

Kullanabilir System.IO.Path.GetDirectory(filename)veya yolu a dönüştürebilir FileInfove kullanabilirsiniz FileInfo.Directory.

Yol ile başka şeyler yapıyorsanız FileInfo, avantajları olabilir.


1
Path Sınıfında 'GetDirectory yöntemi yoktur; 'GetDirectoryName
41'de BillW

12

Klasör yolunu almak için aşağıda belirtilen kodu kullanın

Path.GetDirectoryName(filename);

Bu sizin durumunuzda "C: \ MyDirectory" döndürecektir



5

Bir FileInfonesneyle çalışıyorsanız string, DirectoryNameözellik aracılığıyla dizinin tam yolunun bir temsilini çıkarmanın kolay bir yolu vardır .

FileInfo.DirectoryNameMülkiyetin MSDN üzerinden açıklaması :

Dizinin tam yolunu temsil eden bir dize alır.

Örnek kullanım:

string filename = @"C:\MyDirectory\MyFile.bat";
FileInfo fileInfo = new FileInfo(filename);
string directoryFullPath = fileInfo.DirectoryName; // contains "C:\MyDirectory"

Link En MSDN belgelerine .


5

Geçerli Uygulama Yolu'nu aşağıdakileri kullanarak alabilirsiniz:

string AssemblyPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location).ToString();

İyi şanslar!


0

İlk olarak, System.IO ad alanını kullanmalısınız. Sonra;

string filename = @"C:\MyDirectory\MyFile.bat";
string newPath = Path.GetFullPath(fileName);

veya

string newPath = Path.GetFullPath(openFileDialog1.FileName));

0

Vakanın Path.GetFullPathçoğu için kullanabilirsiniz . Ancak dosya adının nispeten bulunması durumunda da yolu almak istiyorsanız, aşağıdaki genel yöntemi kullanabilirsiniz:

string GetPath(string filePath)
{
  return Path.GetDirectoryName(Path.GetFullPath(filePath))
}

Örneğin:

GetPath("C:\Temp\Filename.txt") dönüş "C:\Temp\"

GetPath("Filename.txt")current working directorygibi geri dön"C:\Temp\"


0

Benim durumumda, ben sadece yaptım tam bir yolun (bir dizinin) dizin adını bulmak gerekiyordu:

var dirName = path.Split('\\').Last();

1
OP'nin ihtiyacı var "C:\MyDirectory", değil MyDirectory. Dize manipülasyon yöntemlerini kullanma tavsiyesi risklidir, birçok tuzak vardır, daha çok özel Pathyöntemler kullanın .
Sinatr

-1

Path.GetDirectoryName (Context.Parameters [ "assemblypath"])


Path.GetDirectoryNamediğer birçok cevapta (kabul edilen cevap dahil) belirtilmiştir
barbsan

ahha? Yani?? herhangi bir anlamı var mı?
Ami Vaknin
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.