web-dev-qa-db-fra.com

Comment puis-je obtenir le dernier dossier d'une chaîne de chemin d'accès?

J'ai un répertoire qui ressemble à ceci:

C:\Users\me\Projects\

Dans mon application, j'ajoute à ce chemin un nom de projet donné:

C:\Users\me\Projects\myProject

Après, je veux pouvoir passer ça dans une méthode. Dans cette méthode, je voudrais également utiliser le nom du projet. Quelle est la meilleure façon d'analyser la chaîne de chemin d'accès pour obtenir le dernier nom de dossier?

Je sais qu'une solution de contournement serait de passer le chemin et le nom du projet dans la fonction, mais j'espérais pouvoir le limiter à un paramètre.

21
AdamMc331

Tu peux faire:

string dirName = new DirectoryInfo(@"C:\Users\me\Projects\myProject\").Name;

Ou utilisez Path.GetFileName Comme (avec un peu de hack) :

string dirName2 = Path.GetFileName(
              @"C:\Users\me\Projects\myProject".TrimEnd(Path.DirectorySeparatorChar));

Path.GetFileName renvoie le nom de fichier du chemin, si le chemin se termine par \ Alors il retournerait une chaîne vide, c'est pourquoi j'ai utilisé la fonction TrimEnd(Path.DirectorySeparatorChar)

47
Habib
string path = @"C:\Users\me\Projects\myProject";
string result = System.IO.Path.GetFileName(path);

result = myProject

2
Alex Anderson

Si vous êtes un fanatique de Linq comme moi, vous pouvez en profiter. Fonctionne quelle que soit la terminaison de la chaîne de chemin d'accès.

public static class PathExtensions
{
    public static string GetLastPathSegment(this string path)
    {
        string lastPathSegment = path
            .Split(new string[] {@"\"}, StringSplitOptions.RemoveEmptyEntries)
            .LastOrDefault();

        return lastPathSegment;
    }
}

Exemple d'utilisation:

lastSegment = Paths.GetLastPathSegment(@"C:\Windows\System32\drivers\etc");
lastSegment = Paths.GetLastPathSegment(@"C:\Windows\System32\drivers\etc\");

Sortie: etc

0
Scott Mitchell