2011-10-18 19 views
0

我有一個函數來寫入文件一個BSTR,但我不能將它寫入一個文件,編碼包括?這是我的功能,請爲我糾正!將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; 
} 
+0

修正了indendation以提高可讀性。 –

+2

這個代碼示例中的'BSTR'在哪裏? – Thanatos

+0

如果您使用C++編寫,使用'iostream'會不會更容易? –

回答

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

相關問題