Dapatkan nama folder dari jalur file lengkap


116

Bagaimana cara mendapatkan nama folder dari jalur lengkap aplikasi?

Ini adalah jalur file di bawah ini,

c:\projects\root\wsdlproj\devlop\beta2\text

Di sini "teks" adalah nama folder.

Bagaimana saya bisa mendapatkan nama folder itu dari jalur ini?

Jawaban:


205

Lihat DirectoryInfo.Name :

string dirName = new DirectoryInfo(@"c:\projects\roott\wsdlproj\devlop\beta2\text").Name;

Tidakkah ini mengharuskan folder tersebut benar-benar ada di sistem file (nama folder akan tetap menjadi "teks" untuk jalur file lengkap tersebut jika folder "c: \ projects \ root \ wsdlproj \ devlop \ beta2 \ text" tidak ( saat ini) ada di sistem file)?
Peter Mortensen

@ Peterpan, no. Saya baru saja menguji ini dan metode mengembalikan nama folder tingkat terendah dari string, bahkan jika jalur folder tidak ada.
vbguyny

1
Terima kasih, jawaban yang bagus. Tapi saya agak bingung bahwa System.IO.Directory tidak mendukung operasi seperti itu.
anhoppe

1
@anhoppe - Saya setuju. Opsi lain yang saya lihat adalah Path.GetDirectoryName msdn.microsoft.com/en-us/library/… - tetapi tidak akan dapat mengujinya hingga besok.
Don Cheadle

30

Saya pikir Anda ingin mendapatkan nama folder induk dari jalur file. Mudah didapat. Salah satu caranya adalah dengan membuat FileInfoobjek tipe dan menggunakan Directorypropertinya.

Contoh:

FileInfo fInfo = new FileInfo("c:\projects\roott\wsdlproj\devlop\beta2\text\abc.txt");

String dirName = fInfo.Directory.Name;

16

Coba ini

var myFolderName = @"c:\projects\roott\wsdlproj\devlop\beta2\text";
var result = Path.GetFileName(myFolderName);

jika Anda memiliki nama file menjadi string, ia juga mengembalikan nama file
swissben

1
Dalam kasus ini, teks adalah nama file (tanpa ekstensi). Saya pikir itulah yang dicari OP. Jika itu folder atau nama file sebenarnya tidak masalah. Jika string tidak mengandung nama file, kode ini akan memberikan apa yang dia cari.
Øyvind Bråthen

4
Kecuali jika jalur diakhiri dengan \ seperti ini:@"c:\projects\roott\wsdlproj\devlop\beta2\text\"
Kristof Claes

1
ini tidak berfungsi untuk folder. Saya mendapatkan string kosong. Harus ada file yang ada
BraveNewMath

3
Ini berfungsi dengan baik jika jalur folder tidak berisi garis miring terbalik (seperti misalnya jalur folder yang dikembalikan dari Path.GetDirectoryName () ). Nama fungsi itu, GetFileName (), agak menyesatkan.
Peter Mortensen

9

Anda bisa menggunakan ini:

string path = @"c:\projects\roott\wsdlproj\devlop\beta2\text";
string lastDirectory = path.Split(new char[] { System.IO.Path.DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries).Last();

bagaimana jika jalurnya terlihat seperti ini: @ "c: \ projects \ roott \ wsdlproj \ devlop \ beta2 \ text \", jadi dengan DirectorySeparatorChar ekstra
Alex Pacurar

1
@Alex - Saya memodifikasi kode saya untuk membuatnya berfungsi dengan jalur semacam itu juga. StringSplitOptions.RemoveEmptyEntriesberhasil.
Kristof Claes

Menurut msdn.microsoft.com/en-us/library/… , FileInfo dapat mengeluarkan pengecualian jika izin yang diperlukan tidak diberikan.
Daniel B

5

Cukup gunakan Path.GetFileName

Di sini - Ekstrak nama folder dari jalur lengkap folder:

string folderName = Path.GetFileName(@"c:\projects\root\wsdlproj\devlop\beta2\text");//Return "text"

Berikut ini beberapa tambahan - Ekstrak nama folder dari jalur lengkap file:

string folderName = Path.GetFileName(Path.GetDirectoryName(@"c:\projects\root\wsdlproj\devlop\beta2\text\GTA.exe"));//Return "text"

3

Saya pikir tidak ada cara kecuali masuk ke sistem file untuk mengetahui apakah text.txt adalah direktori atau hanya sebuah file. Jika Anda menginginkan sesuatu yang sederhana, mungkin Anda bisa menggunakan:

s.Substring(s.LastIndexOf(@"\"));

1
Untuk menghindari garis miring di depan string: s.Substring (s.LastIndexOf (@ "\") + 1);
David Yates

2

Dalam hal ini file yang ingin Anda dapatkan disimpan di variabel strpath:

string strPath = Server.MapPath(Request.ApplicationPath) + "/contents/member/" + strFileName;

2

Berikut adalah metode alternatif yang berfungsi untuk saya tanpa harus membuat objek DirectoryInfo. Poin kuncinya adalah itu GetFileName()berfungsi ketika tidak ada garis miring di jalur.

var name = Path.GetFileName(path.TrimEnd(Path.DirectorySeparatorChar));

Contoh:

var list = Directory.EnumerateDirectories(path, "*")
        .Select(p => new
        {
            id = "id_" + p.GetHashCode().ToString("x"),
            text = Path.GetFileName(p.TrimEnd(Path.DirectorySeparatorChar)),
            icon = "fa fa-folder",
            children = true
        })
        .Distinct()
        .OrderBy(p => p.text);

1

Ini juga bisa dilakukan seperti itu;

var directoryName = System.IO.Path.GetFileName(@"c:\projects\roott\wsdlproj\devlop\beta2\text");

ini akan mengembalikan string kosong
disklosr

@disklosr - baru saja diuji dengan ScriptC dan mengembalikan 'teks'
Steve Cooper

2
Ini berfungsi dengan baik jika jalur folder tidak berisi garis miring terbalik (seperti misalnya jalur folder yang dikembalikan dari Path.GetDirectoryName () ). Nama fungsi itu, GetFileName (), agak menyesatkan.
Peter Mortensen

0

Berdasarkan jawaban sebelumnya (tapi tetap)

using static System.IO.Path;

var dir = GetFileName(path?.TrimEnd(DirectorySeparatorChar, AltDirectorySeparatorChar));

Penjelasan GetFileNamedari sumber NET :

Mengembalikan nama dan bagian ekstensi dari jalur yang diberikan. String yang dihasilkan berisi karakter jalur yang mengikuti karakter garis miring terbalik ("\"), garis miring ("/"), atau titik dua (":") terakhir di jalur. String yang dihasilkan adalah seluruh jalur jika jalur tidak berisi garis miring terbalik setelah menghapus karakter garis miring, garis miring, atau titik dua. String yang dihasilkan adalah null jika path null.


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.