Вопрос

У меня есть этот метод, который получает путь через 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 Ответ более практичен, чем мой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top