Проанализируйте имя каталога от полного filepath в C#

Если у меня есть строковая переменная, которая имеет:

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

и я хочу добраться

"нечто"

что лучший способ состоит в том, чтобы сделать это?

35
задан Peter Mortensen 23 August 2012 в 18:25
поделиться

4 ответа

Использование:

new FileInfo(@"C:\temp\temp2\foo\bar.txt").Directory.Name
73
ответ дан Tim Cooper 27 November 2019 в 06:38
поделиться

Далеко будьте этим, чтобы я не согласился со Стрельбой по тарелочкам, но я всегда использовал

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

, я подозреваю, что FileInfo на самом деле касается файловой системы для получения, это - информация, где, поскольку я ожидал бы, что GetFileNameWithoutExtension является только строковыми операциями - таким образом, производительность одной по другому могла бы быть лучше.

8
ответ дан Handleman 27 November 2019 в 06:38
поделиться

I had an occasion when I was looping through parent child directories

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);                               
            }
        }
    }
}

using this line I was able to get only the current directory name

DirectoryInfo info = new DirectoryInfo(year);
Console.WriteLine(info.Name);
2
ответ дан 27 November 2019 в 06:38
поделиться

Это будет зависеть от того, как вы хотите обрабатывать данные, но другой вариант - использовать String.Split.

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

Это не проверяет исключение массива вне границ, но вы поняли.

1
ответ дан 27 November 2019 в 06:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: