Почему WriteFile не запускается более одного раза?

Вот мой код, в котором я попал в бесконечный цикл (насколько мне известно)

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

Решение

Флаг CREATE_NEW в CreateFile предотвращает обновление файла, потому что 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

4

Другие решения

Как отметил Мартин Джеймс из MSDN:
СОЗДАТЬ НОВЫЙ

Создает новый файл, только если он еще не существует.

Если указанный файл существует, функция завершается ошибкой и последняя ошибка
код установлен в ERROR_FILE_EXISTS (80).

Если указанный файл не существует и является допустимым путем к записи
местоположение, новый файл создан.

Так что кажется, что дескриптор недействителен после первого вызова, и, следовательно, WriteFile() выходит из строя.

0

По вопросам рекламы [email protected]