2011-10-18 7 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

可読性に役立つ修正された指示。 –

+2

このコード例の 'BSTR'はどこにありますか? – Thanatos

+0

C++で書いているのであれば、 'iostream'を使う方がずっと簡単でしょうか? –

答えて

1

BSTRはワイド文字(wchar_t型)文字列です。 WriteFileのような汎用関数を使ってファイルに書き込むことは問題ありません。問題は、テキストエディタでファイルを表示することだけです。これを解決するには、実際の内容を書き込む前に、ファイルの先頭にByte Order Mark(BOM)を配置する必要があります。これにより、ファイルの内容がテキストエディタに表示されます。ただし、ファイルの内容を読むときは、テキストの前にそのBOMが含まれていることに注意する必要があります。あなたがBSTRの内容を書く前に、あなたはファイルを作成

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

直後、および:

あなたは(チェック)これらの線に沿って何かを行うことができます。 BSTR正確wchar_tの配列ではなく、ファイルにその内容を書き込みのために、そのように処理することokです:

後期加えて、ちょうど私の最初の文を明確にします。詳細はEric's Complete Guide To BSTR Semanticsをご覧ください。

関連する問題