string path = "C:/folder1/folder2/file.txt";
¿De qué objetos o métodos podría usar que me darían un resultado folder2
?
string path = "C:/folder1/folder2/file.txt";
¿De qué objetos o métodos podría usar que me darían un resultado folder2
?
Respuestas:
Probablemente usaría algo como:
string path = "C:/folder1/folder2/file.txt";
string lastFolderName = Path.GetFileName( Path.GetDirectoryName( path ) );
La llamada interna a GetDirectoryName
devolverá la ruta completa, mientras que la llamada externa a GetFileName()
devolverá el último componente de ruta, que será el nombre de la carpeta.
Este enfoque funciona independientemente de si la ruta existe o no. Sin embargo, este enfoque se basa en la ruta que inicialmente termina en un nombre de archivo. Si no se sabe si la ruta termina en un nombre de archivo o nombre de carpeta, entonces se requiere que verifique la ruta real para ver si existe primero un archivo / carpeta en la ubicación. En ese caso, la respuesta de Dan Dimitru puede ser más apropiada.
Simple y limpio. Solo usa System.IO.FileSystem
- funciona como un encanto:
string path = "C:/folder1/folder2/file.txt";
string folder = new DirectoryInfo(path).Name;
file.txt
, y nofolder2
Usé este fragmento de código para obtener el directorio de una ruta cuando no hay un nombre de archivo en la ruta:
por ejemplo "c: \ tmp \ test \ visual";
string dir = @"c:\tmp\test\visual";
Console.WriteLine(dir.Replace(Path.GetDirectoryName(dir) + Path.DirectorySeparatorChar, ""));
Salida:
visual
También es importante tener en cuenta que al obtener una lista de nombres de directorio en un bucle, la DirectoryInfo
clase se inicializa una vez, lo que permite solo la llamada por primera vez. Para evitar esta limitación, asegúrese de usar variables dentro de su ciclo para almacenar el nombre de cualquier directorio individual.
Por ejemplo, este código de muestra recorre una lista de directorios dentro de cualquier directorio padre mientras agrega cada nombre de directorio encontrado dentro de una Lista de tipo de cadena:
[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
El siguiente código ayuda a obtener solo el nombre de la carpeta
elementos public ObservableCollection = new ObservableCollection (); tratar { string [] folderPaths = Directory.GetDirectories (stemp); items.Clear (); foreach (cadena s en folderPaths) { items.Add (new gridItems {foldername = s.Remove (0, s.LastIndexOf ('\\') + 1), folderpath = s}); } } captura (excepción a) { } gridItems de clase pública { nombre de carpeta de cadena pública {get; conjunto; } public string folderpath {get; conjunto; } }
Esto es feo pero evita las asignaciones:
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;
}