web-dev-qa-db-fra.com

Obtenir le nom du dossier à partir d'un chemin

string path = "C:/folder1/folder2/file.txt";

Quels objets ou méthodes pourrais-je utiliser pour me donner un résultat de folder2?

148
Ash Burlaczenko

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. Cependant, cette approche repose sur le chemin se terminant initialement par un nom de fichier. Si on ne sait pas si le chemin se termine par un nom de fichier ou un nom de dossier - vous devez alors vérifier le chemin d'accès réel pour voir si un fichier/dossier existe déjà à l'emplacement. Dans ce cas, la réponse de Dan Dimitru pourrait être plus appropriée.

279
LBushkin

Essaye ça:

string filename = @"C:/folder1/folder2/file.txt";
string FolderName = new DirectoryInfo(System.IO.Path.GetDirectoryName(filename)).Name;
23
Wahyu

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;
9
susieloo_

J'ai utilisé cet extrait de code pour obtenir le répertoire d'un chemin quand 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, ""));

Sortie:

visuel

6
Mario

DirectoryInfo effectue le travail pour supprimer le nom de répertoire

string my_path = @"C:\Windows\System32";
DirectoryInfo dir_info = new DirectoryInfo(my_path);
string directory = dir_info.Name;  // System32
6
Sayka
var fullPath = @"C:\folder1\folder2\file.txt";
var lastDirectory = Path.GetDirectoryName(fullPath).Split('\\').LastOrDefault();
2
Shawn

Le code ci-dessous aide à obtenir le nom du dossier uniquement


 éléments publics ObservableCollection = new ObservableCollection (); 

 essayer
 {
 string [] folderPaths = Directory.GetDirectories (stemp); 
 items.Clear (); 
 foreach (chaîne s dans folderPaths) 
 {
 items.Add (new gridItems {NomDossier = s.Remove (0, s.LastIndexOf ('\\') + 1), folderpath = s}); 

 } 

 } 
 capture (exception a) 
 {

 } 
 Classe publique gridItems 
 {
 Chaîne publique NomDossier {get; ensemble; } 
 chaîne publique folderpath {get; ensemble; } 
 } 
1
Joee

Il est également important de noter que lors de l'obtention d'une liste de noms de répertoires dans une boucle, la classe DirectoryInfo est initialisée une fois, ce qui permet uniquement le premier appel. Afin de contourner cette limitation, veillez à utiliser des variables dans votre boucle pour stocker le nom d'un répertoire individuel.

Par exemple, cet exemple de code parcourt une liste de répertoires dans un répertoire parent lors de l'ajout de 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 directories)
        {
            // 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 directories

            ' 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
0
Willy Kimura