C ++ TCHAR [] в строку - PullRequest
       16

C ++ TCHAR [] в строку

1 голос
/ 18 октября 2010

У меня есть этот метод, который получает путь через переменную TCHAR szFileName[], которая содержит что-то вроде C:\app\...\Failed\

Я хотел бы разобрать его, чтобы я мог проверить, если имя последней папкина этом пути на самом деле, "Failed"

Я думал, что с помощью чего-то вроде этого будет работать:

std::wstring Path = szFileName;

string dirpath2;
dirpath2 = Path.substr(0,5); 

Но я получаю следующую ошибку:

Ошибка 6 Ошибка C2679: двоичный файл '=': не найден оператор, который принимает правый операнд типа 'std :: basic_string <_Elem, _Traits, _Ax>' (или нет допустимого преобразования)

Само собой разумеется, я очень плохо знаком с C ++, и я некоторое время искал ответ, но мне не повезло, поэтому любая помощь будет признательна:)

Ответы [ 2 ]

7 голосов
/ 18 октября 2010

Либо вы постоянно используете wstring (вариант с широкими символами) или string («нормальный» вариант).

Поскольку вы получаете TCHAR (который может быть либо wchar_t или char, в зависимости от флагов компилятора), подходящий тип для использования будет tstring, но его не существует. Тем не менее, вы можете определить typedef для него:

typedef std::basic_string<TCHAR> tstring;

Теперь вы можете последовательно использовать один и тот же тип строки, tstring, для всех ваших операций.

3 голосов
/ 18 октября 2010

dirpath2 также должно быть std::wstring.Существуют способы преобразования между ними, но они включают изменение кодировки символов, и это кажется больше, чем вы просите.

Мне нравится просто не использовать TCHAR.Сегодня редко возникает необходимость включать или отключать макросы UNICODE и создавать как ASCII, так и Unicode-версию программы.Просто всегда используйте wstring, wchar_t и функции Windows API, оканчивающиеся на 'W'.

Если вы работаете над чем-то, что вы не можете контролировать выше, ответ Конрада typedef более практичен, чем мой.

...