string path = "C:/folder1/folder2/file.txt";
Quels objets ou méthodes pourrais-je utiliser qui me donneraient un résultat folder2
?
string path = "C:/folder1/folder2/file.txt";
Quels objets ou méthodes pourrais-je utiliser qui me donneraient un résultat folder2
?
Réponses:
J'utiliserais probablement quelque chose comme:
string path = "C:/folder1/folder2/file.txt";
string lastFolderName = Path.GetFileName( Path.GetDirectoryName( path ) );
L'appel interne à GetDirectoryName
renverra le chemin complet, tandis que l'appel externe à GetFileName()
renverra le dernier composant de chemin - qui sera le nom du dossier.
Cette approche fonctionne, que le chemin existe ou non. Cette approche repose cependant sur le chemin se terminant initialement par un nom de fichier. Si vous ne savez pas si le chemin se termine par un nom de fichier ou un nom de dossier, vous devez d'abord vérifier le chemin réel pour voir si un fichier / dossier existe à l'emplacement. Dans ce cas, la réponse de Dan Dimitru peut être plus appropriée.
Simple et propre. Utilise uniquement System.IO.FileSystem
- fonctionne comme un charme:
string path = "C:/folder1/folder2/file.txt";
string folder = new DirectoryInfo(path).Name;
file.txt
, et nonfolder2
J'ai utilisé cet extrait de code pour obtenir le répertoire d'un chemin lorsqu'aucun nom de fichier n'est dans le chemin:
par exemple "c: \ tmp \ test \ visual";
string dir = @"c:\tmp\test\visual";
Console.WriteLine(dir.Replace(Path.GetDirectoryName(dir) + Path.DirectorySeparatorChar, ""));
Production:
visuel
Il est également important de noter que lors de l'obtention d'une liste de noms de répertoires dans une boucle, la DirectoryInfo
classe est initialisée une fois, permettant ainsi uniquement un premier appel. Afin de contourner cette limitation, assurez-vous d'utiliser des variables dans votre boucle pour stocker le nom de tout répertoire individuel.
Par exemple, cet exemple de code parcourt une liste de répertoires dans n'importe quel répertoire parent tout en ajoutant chaque nom de répertoire trouvé dans une liste de type chaîne:
[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
Le code ci-dessous permet d'obtenir uniquement le nom du dossier
public ObservableCollection items = new ObservableCollection (); essayer { string [] folderPaths = Directory.GetDirectories (stemp); items.Clear (); foreach (chaîne s dans folderPaths) { items.Add (new gridItems {foldername = s.Remove (0, s.LastIndexOf ('\\') + 1), folderpath = s}); } } catch (exception a) { } grille de classe publique { public string nomdossier {get; ensemble; } chemin du dossier de chaîne publique {get; ensemble; } }
C'est moche mais évite les allocations:
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;
}