2017-01-31 17 views
0

Я получаю пути к файлам в виде CString. Пример: C: \ Program Files \ Program \ Maps \ World \ North-AmericaУдалить начало CString

Мне нужно удалить все перед картами. I.e C: \ Program Files \ Program \, но этот путь к файлу может быть другим.

Я пробовал:

CString noPath = fullPath; 
fullPath.Truncate(fullPath.ReverseFind('Maps')); 
noPath.Replace(_T(fullPath),_T("")); 

Который не работает последовательно. Это сокращение некоторых путей к файлу в неправильном месте. Решение не нужно использовать Truncate/Заменить, но я не уверен, как еще это сделать

+0

«Карты» должны быть «Карты» –

+0

Просьба представить краткое описание проблемы. То, что вы заявили до сих пор, подвержено усечению с обеих сторон. Эта проблема не может быть решена с учетом имеющейся у нас информации. – IInspectable

+0

Вам может быть повезло, если вы измените теги с 'C++' на 'C++/cli' или по крайней мере включите тег. –

ответ

1

CString Я знаком с не имеет Truncate член и ReverseFind работает только с отдельными символами, а не подстроки ; поэтому тип fullPath является для меня загадкой.

Одно замечание: _T(fullPath) появляется в вашем коде, но макрос _T работает только для литералов (цитируемые строки или символы).

В любом случае, вот CString -одно решение.

CString TruncatePath(CString path, CString subdir) { 
    CString sub = path; 
    const int index = sub.MakeReverse().Find(subdir.MakeReverse()); 
    return index == -1 ? path : path.Right(index + subdir.GetLength()); 
} 
    ... 

CString path  = _T("C:\\Program Files\\Program\\Maps\\World\\North-America"); 
CString sub_path = TruncatePath(path, _T("Maps\\")); 

Дает sub_path: Maps\World\North-America

+0

Мне просто нужно было добавить 5 к индексу, чтобы он печатал Maps \ World \ North-America, но это сработало отлично. Спасибо – user7497377

+0

Я обновил функцию так, чтобы субдир теперь хранился в начале возвращаемого усеченного пути. –

-1

Вы можете использовать Delete функцию для этой цели.

, например:

CString path(_T("C:\\Program Files\\Program\\Maps\\World\\North-America")); 
path.Delete(0, path.Find(_T("Maps"))); //pass first index and number of count to delete 

Теперь переменная path оказывает значение Maps\\World\\North-America

+0

Это не будет определено неопределенными способами, если подстрока не будет найдена. И вызов 'CString :: Find' будет соответствовать подстрокам имен каталогов. Это работает для ввода образца, но не намного больше. – IInspectable