string path = "C:/folder1/folder2/file.txt";
Bunun sonucunda bana hangi nesneleri veya yöntemleri kullanabilirim folder2
?
string path = "C:/folder1/folder2/file.txt";
Bunun sonucunda bana hangi nesneleri veya yöntemleri kullanabilirim folder2
?
Yanıtlar:
Muhtemelen şöyle bir şey kullanırdım:
string path = "C:/folder1/folder2/file.txt";
string lastFolderName = Path.GetFileName( Path.GetDirectoryName( path ) );
İç çağrı GetDirectoryName
tam yolu döndürürken dış çağrı GetFileName()
son yol bileşenini döndürür - klasör adı olacaktır.
Bu yaklaşım, yolun gerçekten var olup olmadığına bakılmaksızın çalışır. Ancak bu yaklaşım, başlangıçta bir dosya adıyla biten yola dayanır. Yolun bir dosya adı veya klasör adıyla bitip bitmediği bilinmiyorsa, önce konumda bir dosya / klasörün olup olmadığını görmek için gerçek yolu kontrol etmenizi gerektirir. Bu durumda, Dan Dimitru'nun cevabı daha uygun olabilir.
Basit ve temiz. Sadece kullanır System.IO.FileSystem
- bir cazibe gibi çalışır:
string path = "C:/folder1/folder2/file.txt";
string folder = new DirectoryInfo(path).Name;
file.txt
ve olmazfolder2
Yolda hiçbir dosya adı olmadığında bir yolun dizinini almak için bu kod parçacığını kullandım:
örneğin "c: \ tmp \ test \ visual";
string dir = @"c:\tmp\test\visual";
Console.WriteLine(dir.Replace(Path.GetDirectoryName(dir) + Path.DirectorySeparatorChar, ""));
Çıktı:
görsel
Bir döngüdeki dizin adlarının bir listesini alırken, DirectoryInfo
sınıfın bir kez başlatıldığını ve böylece yalnızca ilk kez aramaya izin verildiğini de not etmek önemlidir . Bu sınırlamayı atlamak için, döngü içinde herhangi bir dizinin adını saklamak için değişkenleri kullandığınızdan emin olun.
Örneğin, bu örnek kod, bulunan her dizin adını bir dize türü Listesi içine eklerken, herhangi bir üst dizindeki dizinlerin bir listesini gözden geçirir:
[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
Aşağıdaki kod yalnızca klasör adını almanıza yardımcı olur
public ObservableCollection öğeleri = yeni ObservableCollection (); Deneyin { string [] folderPaths = Directory.GetDirectories (stemp); items.Clear (); foreach (folderPaths içindeki dize s) { items.Add (yeni gridItems {foldername = s.Remove (0, s.LastIndexOf ('\\') + 1), klasöryolu = s}); } } catch (İstisna a) { } genel sınıf gridItems { genel dize kat adı {get; Ayarlamak; } genel dize klasöryolu {get; Ayarlamak; } }
Bu çirkin ama tahsisleri önler:
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;
}