Вопрос
У меня есть этот метод, который получает путь через TCHAR szFileName[]
переменная, которая содержит что-то вроде C:\app\...\Failed\
Я хотел бы разобраться через это, чтобы я мог проверить, если название последней папки на этом пути на самом деле, «не удалось»
Я думал, что используя что-то вроде этого будет работать:
std::wstring Path = szFileName;
string dirpath2;
dirpath2 = Path.substr(0,5);
Но я получаю следующую ошибку:
Ошибка 6 Ошибка C2679: двоичный файл '=': Оператор не найдено, который принимает правый операнд типа STD :: Basic_String <_Elem, _traits, _ax> '(или нет приемлемого преобразования)
Само собой разумеется, я очень новичок в C ++, и я искал ответ на некоторое время, но мне не повезло, поэтому любая помощь будет оценена :)
Решение
Либо вы последовательно используете wstring
(широкий вариант символов) или string
(«Нормальный» вариант).
Так как вы получаете TCHAR
(который может быть либо wchar_t
или char
, в зависимости от флагов компилятора), соответствующий тип для использования будет tstring
, но это не существует. Однако вы можете определить Typedef для него:
typedef std::basic_string<TCHAR> tstring;
Теперь вы можете последовательно использовать тот же тип строки, tstring
, Для всех ваших операций.
Другие советы
dirpath2
должен быть std::wstring
также. Существуют способы преобразования между двумя, но они включают в себя изменение кодирования персонажа, и это кажется больше, чем вы просите.
Мне нравится просто не использовать tchar. Сегодня редко существует необходимость, чтобы включить или отключить макросы Unicode и создать как ASCII, так и версию Unicode, версию программы. Просто всегда используйте wstring
, wchar_t
, и функции API Windows, которые заканчиваются «W».
Если вы работаете над чем-то, где у вас нет контроля над вышеупомянутым, Конрад typedef
Ответ более практичен, чем мой.