0

这是我的代码,其中我陷入了无限循环(据我所知)

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 多分钟,看看它是否最终无济于事。

4

2 回答 2

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

看看还加: https ://stackoverflow.com/a/9891875/1922748

于 2015-02-21T11:29:05.247 回答
0

正如 Martin James 提到的,来自 MSDN: CREATE_NEW

仅当它不存在时才创建一个新文件。

如果指定的文件存在,则函数失败并且最后一个错误代码设置为 ERROR_FILE_EXISTS (80)。

如果指定的文件不存在并且是可写位置的有效路径,则创建一个新文件。

因此,第一次调用后句柄似乎无效,因此WriteFile()失败。

于 2015-02-21T11:44:19.287 回答