这是我的代码,其中我已经进行了无限循环(据我所知)
while(true) {
DWORD TitleID = XamGetCurrentTitleId();
std::ostringstream titleMessageSS;
titleMessageSS << "Here's the current title we're on : " << TitleID << "\n\n";
std::string titleMessage = titleMessageSS.str(); // get the string from the stream
DWORD dwBytesToWrite = (DWORD)titleMessage.size();
DWORD dwBytesWritten = 0;
BOOL bErrorFlag = FALSE;
HANDLE logFile = CreateFile( "Hdd:\\LOGFile.txt", GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
bErrorFlag = WriteFile(logFile, titleMessage.c_str(), dwBytesToWrite, &dwBytesWritten, NULL);
CloseHandle(logFile);
Sleep(30000);
}
return NULL;
有没有人看到为什么这只会写一次的原因?我等了5分多钟,看看它到底有什么用,但无济于事。
答案 0 :(得分:4)
CreateFile中的标记CREATE_NEW
会阻止更新文件,因为CreateFile
失败并显示ERROR_FILE_EXISTS
。请改用OPEN_ALWAYS
。
它也总是截断。如果您想在日志文件的末尾添加新行,请将 GENERIC_WRITE
替换为FILE_APPEND_DATA
。
整个CreateFile
行应该是:
HANDLE logFile = CreateFile( "Hdd:\\LOGFile.txt", FILE_APPEND_DATA , 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
仔细阅读CreateFile
文档,这是值得的,因为它在Windows IO世界中具有核心作用:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx
答案 1 :(得分:0)
正如Martin James所提到的,来自MSDN: 的 CREATE_NEW 强>
仅当新文件尚不存在时才创建新文件。
如果指定的文件存在,则函数失败并返回last-error 代码设置为ERROR_FILE_EXISTS(80)。
如果指定的文件不存在并且是可写入的有效路径 location,创建一个新文件。
因此,第一次调用后句柄似乎无效,因此WriteFile()
失败。