Извлечение нескольких имен файлов из нескольких путей в несколько строк - PullRequest
1 голос
/ 14 октября 2011

У меня есть строка:

C: \ Users \ O & S-IT \ Desktop \ NetSparkle (4) .txt |C: \ Users \ O & S-IT \ Desktop \ NetSparkle (5) .txt |C: \ Users \ O & S-IT \ Desktop \ NetSparkle (6) .txt |C: \ Users \ O & S-IT \ Desktop \ NetSparkle (1) .txt |C: \ Users \ O & S-IT \ Desktop \ NetSparkle (2) .txt |C: \ Users \ O & S-IT \ Desktop \ NetSparkle (3) .txt

Я хочу иметь возможность извлечь 6 имен файлов из строки без их соответствующих путей в 6 новых строк, таких как:

"NetSparkle (4) .txt"
"NetSparkle (5) .txt"
"NetSparkle (6) .txt"
"NetSparkle(1) .txt "
" NetSparkle (2) .txt "
" NetSparkle (3) .txt "

Символ-разделитель всегда равен" | ".Имена файлов всегда будут разными, как и пути.Фактическое количество путей и имен файлов в строке также может быть другим.Иногда в строке может быть 3 пути / имени файла, в других случаях может быть целых 15 +.

Как бы я сделал это в C # 3.5 +?

Ответы [ 5 ]

3 голосов
/ 14 октября 2011
var fileNames = input.Split('|')
                     .Select( x => Path.GetFileName(x))
                     .ToList();

или короче:

var fileNames = input.Split('|')
                     .Select(Path.GetFileName)
                     .ToList();
2 голосов
/ 14 октября 2011
var fileNames = myString.Split('|').Select(s => Path.GetFileName(s));
0 голосов
/ 14 октября 2011

Вот мое предложение для вас:

        var stringToExtract = @"C:\Users\O&S-IT\Desktop\NetSparkle (4).txt | C:\Users\O&S-IT\Desktop\NetSparkle (5).txt | C:\Users\O&S-IT\Desktop\NetSparkle (6).txt | C:\Users\O&S-IT\Desktop\NetSparkle (1).txt | C:\Users\O&S-IT\Desktop\NetSparkle (2).txt | C:\Users\O&S-IT\Desktop\NetSparkle (3).txt";

        var fullpaths = stringToExtract.Split(new string[] { " | " }, StringSplitOptions.RemoveEmptyEntries);

        foreach (var fullpath in fullpaths)
        {
            var filename = Path.GetFileName(fullpath);
        }
0 голосов
/ 14 октября 2011

Это быстрый двухэтапный процесс.

Шаг 1: Используйте string.Split(char), чтобы получить массив строк. В вашем случае что-то вроде string[] files = filelist.Split('|');

Шаг 2: Для каждой строки в массиве отрубите все до последней косой черты. Пример files[i] = files[i].Substring(files[i].LastIndexOf('/') + 1);

Полагаю, вам нужно +1, чтобы исключить последнюю косую черту. Если это сокращает ваши имена файлов, просто удалите его.

0 голосов
/ 14 октября 2011

String.Split добьется цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...