35 votes

Analyser le nom du répertoire à partir d'un chemin de fichier complet en C #

Si j'ai une variable chaîne qui a:

 "C:\temp\temp2\foo\bar.txt"
 

et je veux avoir

"foo"

Quelle est la meilleure façon de procéder?

73voto

Jon Skeet Points 692016

Utilisation:

 new FileInfo(@"C:\temp\temp2\foo\bar.txt").Directory.Name
 

8voto

Handleman Points 397

Loin de moi l'idée d'être en désaccord avec le Skeet, mais j'ai toujours utilisé

 Path.GetFileNameWithoutExtension(@"C:\temp\temp2\foo\bar.txt")
 

Je soupçonne que FileInfo touche réellement le système de fichiers pour obtenir ses informations, alors que je m'attends à ce que GetFileNameWithoutExtension ne soit que des opérations de chaîne - les performances de l'une par rapport à l'autre pourraient donc être meilleures.

7voto

Ananth Points 2175

Je pense que la solution la plus simple est

DirectoryInfo dinfo = new DirectoryInfo (chemin);

string folderName = dinfo.Parent.Name;

2voto

Shameegh Boer Points 26

J'ai eu une occasion lorsque je parcourais les répertoires enfants parents

 string[] years = Directory.GetDirectories(ROOT);
foreach (var year in years)
{
    DirectoryInfo info = new DirectoryInfo(year);
    Console.WriteLine(info.Name);
    Console.WriteLine(year);
    //Month directories
    string[] months = Directory.GetDirectories(year);
    foreach (var month in months)
    {
        Console.WriteLine(month);
        //Day directories
        string[] days = Directory.GetDirectories(month);
        foreach (var day in days)
        {
            //checkes the files in the days
            Console.WriteLine(day);
            string[] files = Directory.GetFiles(day);
            foreach (var file in files)
            {
                Console.WriteLine(file);                               
            }
        }
    }
}
 

en utilisant cette ligne, j'ai pu obtenir uniquement le nom du répertoire actuel

 DirectoryInfo info = new DirectoryInfo(year);
Console.WriteLine(info.Name);
 

1voto

RodYan Points 569

Cela dépendra de la façon dont vous souhaitez gérer les données, mais une autre option consiste à utiliser String.Split.

 string myStr = @"C:\foo\bar.txt";
string[] paths = myStr.Split('\\');
string dir = paths[paths.Length - 2]; //returns "foo"
 

Cela ne vérifie pas une exception de tableau hors limites, mais vous avez l'idée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X