用编码写BSTR到文件怎么样?

时间:2011-10-18 07:09:00

标签: c++ winapi

我有一个函数来写一个BSTR文件,但是我不能把它写成一个带有编码包含的文件?这是我的功能,请为我更正!

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 个答案:

答案 0 :(得分:1)

BSTR是宽字符(wchar_t)字符串。使用通用函数WriteFile将它们写入文件应该没有问题。唯一的问题是使用一些文本编辑器查看文件。要解决这个问题,在编写实际内容之前,必须在文件的开头放置Byte Order Mark(BOM)。这将向文本编辑器指示文件的内容。但请注意,当您阅读文件的内容时,您必须注意这一点 - 它将在文本之前包含该BOM。

你可以沿着这些方向做某事(未选中):

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

在您创建文件之后,在写入BSTR的内容之前。

延迟添加,只是为了澄清我的第一句话:BSTR不是完全 wchar_t的数组,但是为了将其内容写入文件,可以这样对待它。有关详情,请阅读Eric's Complete Guide To BSTR Semantics

相关问题