string path = "C:/folder1/folder2/file.txt";
Quali oggetti o metodi potrei usare per ottenere un risultato folder2
?
string path = "C:/folder1/folder2/file.txt";
Quali oggetti o metodi potrei usare per ottenere un risultato folder2
?
Risposte:
Probabilmente userei qualcosa del tipo:
string path = "C:/folder1/folder2/file.txt";
string lastFolderName = Path.GetFileName( Path.GetDirectoryName( path ) );
La chiamata interna a GetDirectoryName
restituirà il percorso completo, mentre la chiamata esterna GetFileName()
restituirà l'ultimo componente del percorso, che sarà il nome della cartella.
Questo approccio funziona indipendentemente dal fatto che il percorso esista effettivamente. Questo approccio, tuttavia, si basa sul percorso che termina inizialmente con un nome file. Se non è noto se il percorso termina con un nome file o cartella, è necessario verificare il percorso effettivo per vedere se esiste un file / cartella nella posizione prima. In tal caso, la risposta di Dan Dimitru potrebbe essere più appropriata.
Semplice e pulito Utilizza solo System.IO.FileSystem
- funziona come un fascino:
string path = "C:/folder1/folder2/file.txt";
string folder = new DirectoryInfo(path).Name;
file.txt
, e nonfolder2
Ho usato questo frammento di codice per ottenere la directory per un percorso quando non è presente alcun nome file nel percorso:
ad esempio "c: \ tmp \ test \ visual";
string dir = @"c:\tmp\test\visual";
Console.WriteLine(dir.Replace(Path.GetDirectoryName(dir) + Path.DirectorySeparatorChar, ""));
Produzione:
visivo
È anche importante notare che mentre si ottiene un elenco di nomi di directory in un ciclo, la DirectoryInfo
classe viene inizializzata una volta consentendo così solo la prima chiamata. Per aggirare questa limitazione, assicurarsi di utilizzare le variabili all'interno del proprio ciclo per memorizzare il nome di ogni singola directory.
Ad esempio, questo codice di esempio scorre in un elenco di directory all'interno di qualsiasi directory padre mentre aggiunge ogni nome di directory trovato all'interno di un Elenco di tipo stringa:
[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
Il codice seguente aiuta a ottenere solo il nome della cartella
oggetti pubblici ObservableCollection = new ObservableCollection (); provare { string [] folderPaths = Directory.GetDirectories (stemp); items.Clear (); foreach (stringa s in folderPaths) { items.Add (new gridItems {foldername = s.Remove (0, s.LastIndexOf ('\\') + 1), folderpath = s}); } } cattura (eccezione a) { } gridItems di classe pubblica { public string foldername {get; impostato; } percorso cartella pubblica stringa {get; impostato; } }
Questo è brutto ma evita le allocazioni:
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;
}