C语言 无法使用WriteFile函数写入整个缓冲区

sgtfey8w  于 2023-02-15  发布在  其他
关注(0)|答案(1)|浏览(182)

我正在尝试使用WriteFile在一个. TXT文件中写入一个简单的文本。

// For WriteFile fuction
    BOOL writeFile;
    LPCVOID textToWrite = L"SakyLabs: Hello, MDE.";
    DWORD numberOfBytes = (DWORD)wcslen(textToWrite);
    DWORD numberOfBytesWritten;

numberOfBytes是基于微软的from here
接下来,WriteFile函数:

writeFile = WriteFile(createFile, textToWrite, numberOfBytes, &numberOfBytesWritten, NULL);

我正在从以前的CreateFileW调用中获取createFile。另外,我正在使用Unicode函数。
WriteFile可以工作,但是我只得到文件中写的这部分文本:

S a k y L a b s :   H

我哪里做错了?

56lgkhnf

56lgkhnf1#

问题是你正在创建一个宽字符串L"..."。每个WCHAR都是两个字节长--因为Windows对宽字符串使用UTF-16。wcslen计算WCHAR的个数,而不是字节数。
将字符串长度乘以WCHAR的大小:

DWORD numberOfBytes = (DWORD)wcslen(textToWrite)*sizeof(WCHAR);

或者使用窄字符串(如果实际使用非ASCII,最好使用UTF-8编码):

LPCVOID textToWrite = "SakyLabs: Hello, MDE.";
DWORD numberOfBytes = (DWORD)strlen(textToWrite);

相关问题