Записать BSTR в файл с кодировкой как? - PullRequest
0 голосов
/ 18 октября 2011

У меня есть функция для записи файла BSTR, но я не могу записать его в файл с кодировкой include?Вот моя функция, пожалуйста, поправьте меня!

unsigned long Vnpt_WriteFile(const LPCTSTR pFilePath, const BYTE* pbData, const DWORD cbData)
{
    DWORD numbytes = 0;
    unsigned long rv = 0;
    FILE*   fileHandle;

    HANDLE fh = CreateFile(pFilePath, FILE_WRITE_DATA,0,NULL,CREATE_ALWAYS,0,NULL);
    if (fh == INVALID_HANDLE_VALUE){
        rv = CKR_CREATE_FILE_ERROR;
        return rv;
    }

    if(!WriteFile(fh, pbData, cbData, &numbytes, NULL)){
        rv = CKR_WRITE_FILE_ERROR;
    }
    CloseHandle(fh);
    return rv;
}

1 Ответ

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

BSTR - широкие строки char (wchar_t). У вас не должно возникнуть проблем с записью их в файл с использованием функций общего назначения, таких как WriteFile. Единственная проблема, с которой вы столкнетесь, - это просмотр файла в текстовом редакторе. Чтобы решить эту проблему, вы должны поместить Byte Order Mark (BOM) в начале файла, прежде чем писать фактический контент. Это будет указывать содержимое файла в текстовом редакторе. Обратите внимание, однако, что вы должны знать об этом при чтении содержимого файла - он будет содержать эту спецификацию перед текстом.

Вы можете сделать что-то вроде этого (не проверено):

unsigned char BOM[2] = {0xFF, 0xFE};
WriteFile(fh, BOM, 2, &numbytes, NULL);

сразу после создания файла и перед записью содержимого BSTR.

Позднее добавление, просто для пояснения моего первого предложения: BSTR не является точно массивом wchar_t с, но ради записи его содержимого в файл, это нормально относиться к нему как таковой. Подробнее об этом читайте Полное руководство Эрика по семантике BSTR .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...