string path = "C:/folder1/folder2/file.txt";
Aus welchen Objekten oder Methoden könnte ich ein Ergebnis erzielen folder2
?
string path = "C:/folder1/folder2/file.txt";
Aus welchen Objekten oder Methoden könnte ich ein Ergebnis erzielen folder2
?
Antworten:
Ich würde wahrscheinlich so etwas verwenden wie:
string path = "C:/folder1/folder2/file.txt";
string lastFolderName = Path.GetFileName( Path.GetDirectoryName( path ) );
Der innere Aufruf von GetDirectoryName
gibt den vollständigen Pfad zurück, während der äußere Aufruf von GetFileName()
die letzte Pfadkomponente zurückgibt - den Ordnernamen.
Dieser Ansatz funktioniert unabhängig davon, ob der Pfad tatsächlich vorhanden ist oder nicht. Dieser Ansatz basiert jedoch auf dem Pfad, der anfänglich mit einem Dateinamen endet. Wenn nicht bekannt ist, ob der Pfad mit einem Dateinamen oder einem Ordnernamen endet, müssen Sie zuerst den tatsächlichen Pfad überprüfen, um festzustellen, ob eine Datei / ein Ordner am Speicherort vorhanden ist. In diesem Fall könnte die Antwort von Dan Dimitru angemessener sein.
Einfach und sauber. Nur verwendet System.IO.FileSystem
- funktioniert wie ein Zauber:
string path = "C:/folder1/folder2/file.txt";
string folder = new DirectoryInfo(path).Name;
file.txt
und nichtfolder2
Ich habe dieses Code-Snippet verwendet, um das Verzeichnis für einen Pfad abzurufen, wenn sich kein Dateiname im Pfad befindet:
zum Beispiel "c: \ tmp \ test \ visual";
string dir = @"c:\tmp\test\visual";
Console.WriteLine(dir.Replace(Path.GetDirectoryName(dir) + Path.DirectorySeparatorChar, ""));
Ausgabe:
visuell
Es ist auch wichtig zu beachten, dass beim Abrufen einer Liste von Verzeichnisnamen in einer Schleife die DirectoryInfo
Klasse einmal initialisiert wird, sodass nur ein erstmaliger Aufruf möglich ist. Um diese Einschränkung zu umgehen, stellen Sie sicher, dass Sie Variablen in Ihrer Schleife verwenden, um den Namen eines einzelnen Verzeichnisses zu speichern.
Dieser Beispielcode durchläuft beispielsweise eine Liste von Verzeichnissen in einem übergeordneten Verzeichnis, während jeder gefundene Verzeichnisname in einer Liste mit dem Zeichenfolgentyp hinzugefügt wird:
[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
Der folgende Code hilft, nur den Ordnernamen abzurufen
public ObservableCollection items = new ObservableCollection (); Versuchen { string [] folderPaths = Directory.GetDirectories (stemp); items.Clear (); foreach (Zeichenfolge s in folderPaths) { items.Add (new gridItems {Ordnername = s.Remove (0, s.LastIndexOf ('\\') + 1), Ordnerpfad = s}); }} }} fangen (Ausnahme a) { }} public class gridItems { öffentlicher String-Ordnername {get; einstellen; }} öffentlicher String-Ordnerpfad {get; einstellen; }} }}
Dies ist hässlich, vermeidet jedoch Zuweisungen:
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;
}