string path = "C:/folder1/folder2/file.txt";
Benda atau metode apa yang bisa saya gunakan yang akan memberi saya hasil folder2
?
string path = "C:/folder1/folder2/file.txt";
Benda atau metode apa yang bisa saya gunakan yang akan memberi saya hasil folder2
?
Jawaban:
Saya mungkin akan menggunakan sesuatu seperti:
string path = "C:/folder1/folder2/file.txt";
string lastFolderName = Path.GetFileName( Path.GetDirectoryName( path ) );
Panggilan dalam ke GetDirectoryName
akan mengembalikan path lengkap, sedangkan panggilan luar ke GetFileName()
akan mengembalikan komponen path terakhir - yang akan menjadi nama folder.
Pendekatan ini berfungsi apakah jalan benar-benar ada atau tidak. Pendekatan ini, bagaimanapun, bergantung pada jalur yang awalnya berakhir dengan nama file. Jika tidak diketahui apakah jalur berakhir dengan nama file atau nama folder - maka mengharuskan Anda memeriksa jalur sebenarnya untuk melihat apakah file / folder ada di lokasi terlebih dahulu. Dalam hal ini, jawaban Dan Dimitru mungkin lebih tepat.
Sederhana & bersih. Hanya menggunakan System.IO.FileSystem
- berfungsi seperti pesona:
string path = "C:/folder1/folder2/file.txt";
string folder = new DirectoryInfo(path).Name;
file.txt
, dan tidakfolder2
Saya menggunakan potongan kode ini untuk mendapatkan direktori untuk jalur ketika tidak ada nama file di jalur:
misalnya "c: \ tmp \ test \ visual";
string dir = @"c:\tmp\test\visual";
Console.WriteLine(dir.Replace(Path.GetDirectoryName(dir) + Path.DirectorySeparatorChar, ""));
Keluaran:
visual
Penting juga untuk dicatat bahwa saat mendapatkan daftar nama direktori dalam satu lingkaran, DirectoryInfo
kelas akan diinisialisasi satu kali sehingga hanya memungkinkan panggilan pertama kali. Untuk melewati batasan ini, pastikan Anda menggunakan variabel dalam loop Anda untuk menyimpan nama direktori apa pun.
Sebagai contoh, kode sampel ini loop melalui daftar direktori dalam direktori induk sembari menambahkan setiap nama direktori yang ditemukan di dalam Daftar tipe string:
[C #]
string[] parentDirectory = Directory.GetDirectories("/yourpath");
List<string> directories = new List<string>();
foreach (var directory in parentDirectory)
{
// Notice I've created a DirectoryInfo variable.
DirectoryInfo dirInfo = new DirectoryInfo(directory);
// And likewise a name variable for storing the name.
// If this is not added, only the first directory will
// be captured in the loop; the rest won't.
string name = dirInfo.Name;
// Finally we add the directory name to our defined List.
directories.Add(name);
}
[VB.NET]
Dim parentDirectory() As String = Directory.GetDirectories("/yourpath")
Dim directories As New List(Of String)()
For Each directory In parentDirectory
' Notice I've created a DirectoryInfo variable.
Dim dirInfo As New DirectoryInfo(directory)
' And likewise a name variable for storing the name.
' If this is not added, only the first directory will
' be captured in the loop; the rest won't.
Dim name As String = dirInfo.Name
' Finally we add the directory name to our defined List.
directories.Add(name)
Next directory
Kode di bawah ini membantu untuk mendapatkan nama folder saja
item ObservableCollection publik = new ObservableCollection (); mencoba { string [] folderPaths = Directory.GetDirectories (stemp); items.Clear (); foreach (string s di folderPaths) { items.Add (new gridItems {foldername = s.Remove (0, s.LastIndexOf ('\\') + 1), folderpath = s}); } } catch (Pengecualian a) { } gridItems kelas publik { foldername string publik {get; set; } folderpath public string {get; set; } }
Ini jelek tapi menghindari alokasi:
private static string GetFolderName(string path)
{
var end = -1;
for (var i = path.Length; --i >= 0;)
{
var ch = path[i];
if (ch == System.IO.Path.DirectorySeparatorChar ||
ch == System.IO.Path.AltDirectorySeparatorChar ||
ch == System.IO.Path.VolumeSeparatorChar)
{
if (end > 0)
{
return path.Substring(i + 1, end - i - 1);
}
end = i;
}
}
if (end > 0)
{
return path.Substring(0, end);
}
return path;
}