C # эквивалент InStrRev - PullRequest
       0

C # эквивалент InStrRev

8 голосов
/ 02 апреля 2011

Я искал более часа, и я не могу всю жизнь понять, как искать строковую переменную, начиная справа.Я хочу получить последнюю папку пути (прямо перед именем файла). В VB6 я бы сделал что-то вроде этого:

Dim s As String

s = "C:\Windows\System32\Foo\Bar\"

Debug.Print Mid(s, InStrRev(Left(s, Len(s) - 1), "\") + 1)

Вот что я пробовал до сих пор:*

string s = "C:\\Windows\System32\\Foo\\Bar\\";

s = agencyName.Substring(s.LastIndexOf("\\") + 1) 

Ответы [ 3 ]

8 голосов
/ 02 апреля 2011

Использование strToSearch.LastIndexOf(strToFind);.

РЕДАКТИРОВАТЬ: Я вижу, вы обновили свой вопрос, чтобы сказать, что вы пытались LastIndexOf(). Этот метод работает, я использовал его много раз.

Вы сказали, что хотите получить позицию, с которой начинается имя файла. Однако ваш пример пути не содержит имени файла. (Поскольку он оканчивается на \, это означает, что это имя каталога.)

Как указано в другом месте, если вы на самом деле не хотите использовать последний \, вам нужно указать начальный индекс, чтобы LastIndexOf() пропустил завершающие обратные слэши, которые вам не нужны.

6 голосов
/ 02 апреля 2011

Предположительно, вы хотите игнорировать последние \ в строке, потому что ваш код VB ищет все, кроме последнего символа. Ваш код C # не работает, потому что он ищет всю строку, находит \ как последний символ в строке, в результате чего ваша подстрока ничего не возвращает. Вы должны указать LastIndexOf начинать с символа перед последним, как вы это делали в VB.

Я думаю, что эквивалент вашего кода VB будет:

s = s.Substring(s.LastIndexOf("\\", s.Length - 2) + 1)  
3 голосов
/ 02 апреля 2011
var fullPath = @"C:\foo\bar\file.txt";
var folderName = new FileInfo(fullPath).Directory.Name;
//folderName will be "bar"

Редактировать: Уточненный пример

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