На самом деле, вы можете сделать это очень просто, используя классы CStdioFile
и CString
, предоставляемые MFC
.Библиотека MFC
является очень мощной и всеобъемлющей (несмотря на некоторые серьезные странности и даже ошибки);но, если вы уже используете его, используйте его в полном объеме:
...
const wchar_t* inpPath = L"<path>\\InpFile.txt"; // These values are given just...
const wchar_t* outPath = L"<path>\\outFile.txt"; // ... for illustrative purposes!
CStdioFile inpFile(inpPath, CFile::modeRead | CFile::typeText);
CStdioFile outFile(outPath, CFile::modeWrite | CFile::modeCreate | CFile::typeText
| CFile::typeUnicode); // Note the Unicode flag - will create UTF-16LE file!
CString textBuff;
while (inpFile.ReadString(textBuff)) {
outFile.WriteString(textBuff);
outFile.WriteString(L"\n");
}
inpFile.Close();
outFile.Close();
...
Конечно, вам нужно будет немного изменить код, если вы хотите, чтобы входные и выходные файлыиметь тот же путь, но это не означало бы изменение основной предпосылки!
При таком подходе не нужно заботиться о каких-либо вызовах библиотеки для преобразования строк символов - просто позвольте MFC
сделать это за вас, когдаон читает / записывает (Unicode) CString
объект!
Примечание: скомпилирован и протестирован с MSVC (VS-2019), 64-разрядный, в режиме Unicode.
РЕДАКТИРОВАТЬ: Может быть, я неправильно понял ваш вопрос!Если вы на самом деле не хотите конвертировать файл, а просто отображаете его содержимое, уберите все ссылки в моем коде в outFile
и просто выполняйте все с каждым прочитанным объектом textBuffer
.Класс CString
отвечает за все необходимые преобразования ASCII / UTF-8 / UTF-16LE.