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".


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.


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



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.


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



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 .


5

Anda bisa mendapatkan Jalur Aplikasi saat ini menggunakan:

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

Semoga berhasil!


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));

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\"


0

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

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

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"])


Path.GetDirectoryNamedisebutkan dalam banyak jawaban lain (termasuk jawaban yang diterima)
barbsan

ahha? Begitu?? adakah titik datang?
Ami Vaknin
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.