string path = "C:/folder1/folder2/file.txt";
De quais objetos ou métodos eu poderia usar que me dariam resultado folder2
?
string path = "C:/folder1/folder2/file.txt";
De quais objetos ou métodos eu poderia usar que me dariam resultado folder2
?
Respostas:
Eu provavelmente usaria algo como:
string path = "C:/folder1/folder2/file.txt";
string lastFolderName = Path.GetFileName( Path.GetDirectoryName( path ) );
A chamada interna para GetDirectoryName
retornará o caminho completo, enquanto a chamada externa GetFileName()
retornará o último componente do caminho - que será o nome da pasta.
Essa abordagem funciona se o caminho realmente existe ou não. Essa abordagem, no entanto, depende do caminho que termina inicialmente em um nome de arquivo. Se não se sabe se o caminho termina em um nome de arquivo ou pasta - é necessário que você verifique o caminho real para ver se existe um arquivo / pasta no local primeiro. Nesse caso, a resposta de Dan Dimitru pode ser mais apropriada.
Simples e limpo. Usa apenas System.IO.FileSystem
- funciona como um encanto:
string path = "C:/folder1/folder2/file.txt";
string folder = new DirectoryInfo(path).Name;
file.txt
, e nãofolder2
Usei esse trecho de código para obter o diretório para um caminho quando nenhum nome de arquivo está no caminho:
por exemplo "c: \ tmp \ test \ visual";
string dir = @"c:\tmp\test\visual";
Console.WriteLine(dir.Replace(Path.GetDirectoryName(dir) + Path.DirectorySeparatorChar, ""));
Resultado:
visual
Também é importante observar que, ao obter uma lista de nomes de diretório em um loop, a DirectoryInfo
classe é inicializada uma vez, permitindo apenas a primeira chamada. Para contornar essa limitação, certifique-se de usar variáveis dentro do seu loop para armazenar o nome de qualquer diretório individual.
Por exemplo, esse código de amostra percorre uma lista de diretórios em qualquer diretório pai enquanto adiciona cada nome de diretório encontrado dentro de uma lista de tipos de sequência:
[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
O código abaixo ajuda a obter apenas o nome da pasta
itens públicos ObservableCollection = new ObservableCollection (); experimentar { string [] folderPaths = Directory.GetDirectories (stemp); items.Clear (); foreach (string s em folderPaths) { items.Add (new gridItems {foldername = s.Remove (0, s.LastIndexOf ('\\') + 1), folderpath = s})); } } catch (exceção a) { } public class gridItems { string pública nome da pasta {get; conjunto; } caminho da pasta da cadeia pública {get; conjunto; } }
Isso é feio, mas evita alocações:
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;
}