Если у вас есть доступ к ATL, который, как я полагаю, вы используете, если используете CString, вы можете посмотреть в ATL conversion classes, как CT2CA.
CString fileExt = _T ("txt");
CT2CA fileExtA (fileExt);
Если преобразование должно быть выполнено (как при компиляции для Unicode), то CT2CA выделяет некоторую внутреннюю память и выполняет преобразование, уничтожая память в его деструкторе. Если компилировать для ANSI, преобразование не требуется, поэтому оно просто зависает с указателем на исходную строку. Он также обеспечивает неявное преобразование в const char *
, поэтому вы можете использовать его как любую строку стиля C.
Это делает преобразования очень легкими, с оговоркой, что если вам нужно висеть на строке после того, как CT2CA выходит из области видимости, тогда вам нужно скопировать строку в буфер под вашим контролем (а не просто хранить указатель к нему). В противном случае CT2CA очищает преобразованный буфер, и у вас есть оборванная ссылка.
Кто скажет, что все расширения имеют 3 символа? Вы должны найти последнее. (точка) и скопируйте остальную часть строки – Anders
Это для коммерческого проекта. Все наши расширения - 3 символа. – Justin
До того дня, когда они этого не делают. – jalf