std::cout << buffer << std::endl;
if (lastTitle != buffer) {
//write new title;
WriteFile(file, "\n\nWindow: ", sizeof("\n\nWindow: "), NULL, NULL);
WriteFile(file, buffer.c_str(), sizeof(buffer), NULL, NULL);
WriteFile(file, "\n", sizeof("\n"), NULL, NULL);
std::cout << GetLastError(); //this is showing 0, which means no error
Cout正在输出:
C:\用户\ riseo \桌面\ C ++ \ my_proj \调试\ my_proj.exe
正在写入的文件显示:
窗口:C:\ Users \ riseo \ Desktop \ C ++ \ m
我不太确定为什么会被截断,它应该与cout打印的相同。对不起,这篇文章没有做太多的研究,但是我整天都被各种字符串格式相关的问题所灼烧,我不知道这里发生了什么。我能想到的可能就是c_str()出错了。
答案 0 :(得分:4)
你严重误导sizeof()
。 WriteFile()
对字节进行操作,但您传递的是字符数据。字符串文字包含sizeof()
将包含的空终止符,在这种情况下您不需要。 std::string()
包含指向字符数据的指针,因此sizeof(std::string)
不会考虑真正的字符长度。
你需要这样做:
//write new title;
WriteFile(file, "\n\nWindow: ", strlen("\n\nWindow: "), NULL, NULL);
WriteFile(file, buffer.c_str(), buffer.length(), NULL, NULL);
WriteFile(file, "\n", strlen("\n"), NULL, NULL);
包装函数会更好:
bool WriteStringToFile(HANDLE hFile, const std::string &str)
{
return WriteFile(hFile, str.c_str(), str.length(), NULL, NULL);
}
...
//write new title;
WriteStringToFile(file, "\n\nWindow: ");
WriteStringToFile(file, buffer);
WriteStringToFile(file, "\n");
std::ofstream
会更好:
std::ofstream ofs("myfile.txt", std::ios_base::binary);
...
ofs << "\n\nWindow: " << buffer << "\n";