@sddvxd

Как сделать сравнение юникод строки из файла и const wchar_t*?

Здравствуйте! Я перехватываю перемещение файла, в файле permission.txt через \n записаны пути до файлов, которые перемещать нельзя
Сейчас сильно остановился на больной для меня теме - кодировки. Не могу понять как взять строку из файла и сравнить ее с LPCWSTR:

BOOL WINAPI MyMoveFileExW(LPCWSTR lpExistingFileName, LPCWSTR lpNewFileName, DWORD dwFlags)
{
    std::wstring lpEx(lpExistingFileName);
    std::wifstream wif("C:\\cpp\\permission.txt", std::ios::binary);
    if (wif.is_open())
    {
        wif.imbue(std::locale(wif.getloc(), new std::codecvt_utf8<wchar_t, 0x10ffff, std::consume_header>));

        std::wstring wline;
        while (std::getline(wif, wline))
        {
            if(wline == lpEx){
                return FALSE;
            }
        }
        wif.close();
    }

  BOOL retValue;
  VirtualProtect((LPVOID)pOrigMBAddress_2, SIZE, myProtect_2, NULL);     // assign read write protection
  memcpy((LPVOID)pOrigMBAddress_2, oldBytes_2, SIZE);                            // restore backup
  retValue = pOrigMBAddress_2(lpExistingFileName, lpNewFileName, dwFlags);
  memcpy((LPVOID)pOrigMBAddress_2, JMP_2, SIZE);                                 // set the jump instruction again
  VirtualProtect((LPVOID)pOrigMBAddress_2, SIZE, oldProtect_2, NULL);    // reset protection

  return retValue;
}


Подскажите, пожалуйста, какой-нибудь вариант
  • Вопрос задан
  • 189 просмотров
Решения вопроса 1
@res2001
Developer, ex-admin
Я бы читал файл в двоичном режиме и конвертировал полученный массив байт с помощью функций WinAPI: WideCharToMultiByte/MultiByteToWideChar. Файл должен быть в строго заданной, заранее известной кодировке.
Но это не C++ style :-)

Ваш файл содержит BOM заголовок? Судя по документации std::consume_header требует для указания конкретной кодировки использовать BOM.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы