Bagaimana cara mendapatkan direktori dari path lengkap file?

527

Apa cara paling sederhana untuk mendapatkan direktori tempat suatu file berada? Saya menggunakan ini untuk mengatur direktori kerja.

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

Dalam contoh ini, saya harus mendapatkan "C: \ MyDirectory".

Bahkan Mien
sumber
3
Bukankah seharusnya itu string literal? @"C:\MyDirectory\MyFile.bat"
Edgar
3
Apakah seseorang ingin melindungi pertanyaan ini yang memiliki hak untuk melakukannya? 11 jawaban serupa dengan yang terakhir dari 2017 ..
Boern

Jawaban:

838

Jika Anda benar-benar memiliki jalur absolut, gunakan Path.GetDirectoryName(path).

Jika Anda mungkin hanya mendapatkan nama relatif, gunakan new FileInfo(path).Directory.FullName.

Perhatikan bahwa Pathdan FileInfokeduanya ditemukan di namespace System.IO.

Jon Skeet
sumber
1
Memang, tetapi apakah ada metode yang disebut GetDirectory? Bukannya GetDirectoryName?
Brandon
1
Anda bisa menggunakan DirectoryName alih-alih Directory.FullPath bukan?
Steven Robbins
1
Saya membuktikan tidak menerima nama relatif. Saya belum melihat bahwa jalan akan absolut. Saya sekarang punya kedua versi :)
Jon Skeet
Apakah Anda menggunakan snippy untuk memeriksa itu? ;)
shahkalpesh
1
@UlyssesAlves: Saya yakin new FileInfo(path).Directory.FullNameharus bekerja dalam kedua kasus.
Jon Skeet
60
System.IO.Path.GetDirectoryName(filename)
Cherian
sumber
22
Path.GetDirectoryName(filename);
Grzenio
sumber
12

Anda dapat menggunakan System.IO.Path.GetDirectory(filename), atau mengubah jalur menjadi FileInfo, dan menggunakan FileInfo.Directory.

Jika Anda melakukan hal-hal lain dengan jalan, FileInfomungkin ada kelebihannya.

Reed Copsey
sumber
1
tidak ada metode GetDirectory di Kelas Path; Anda pasti bermaksud '
GetDirectoryName
12

Gunakan kode yang disebutkan di bawah untuk mendapatkan jalur folder

Path.GetDirectoryName(filename);

Ini akan mengembalikan "C: \ MyDirectory" dalam kasus Anda

thejustv
sumber
10

Anda dapat menggunakan Path.GetDirectoryNamedan hanya memasukkan nama file.

Tautan MSDN

Brandon
sumber
5

Jika Anda bekerja dengan FileInfoobjek, maka ada cara mudah untuk mengekstrak stringrepresentasi path lengkap direktori melalui DirectoryNameproperti.

Deskripsi FileInfo.DirectoryNameProperti melalui MSDN:

Mendapat string yang mewakili path lengkap direktori.

Penggunaan sampel:

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

Tautan ke dokumentasi MSDN .

Derek W
sumber
5

Anda bisa mendapatkan Jalur Aplikasi saat ini menggunakan:

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

Semoga berhasil!

David Castro
sumber
0

Pertama, Anda harus menggunakan namespace System.IO. Kemudian;

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

atau

string newPath = Path.GetFullPath(openFileDialog1.FileName));
Umut D.
sumber
0

Anda dapat menggunakan Path.GetFullPathsebagian besar kasus. Tetapi jika Anda ingin mendapatkan path juga dalam hal nama file relatif terletak maka Anda dapat menggunakan metode generik di bawah ini:

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

Sebagai contoh:

GetPath("C:\Temp\Filename.txt") kembali "C:\Temp\"

GetPath("Filename.txt")kembali current working directoryseperti"C:\Temp\"

Minh Nguyen
sumber
0

Dalam kasus saya, saya perlu menemukan nama direktori path lengkap (dari direktori) jadi saya lakukan:

var dirName = path.Split('\\').Last();
Amir No-Family
sumber
1
OP perlu "C:\MyDirectory"dan tidak MyDirectory. Saran untuk menggunakan metode manipulasi string berisiko, ada banyak perangkap, daripada menggunakan Pathmetode khusus .
Sinatr
-1

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

Ami Vaknin
sumber
Path.GetDirectoryNamedisebutkan dalam banyak jawaban lain (termasuk jawaban yang diterima)
barbsan
ahha? Begitu?? adakah titik datang?
Ami Vaknin