2015-02-21 10 views
0

Вот мой код, в котором у меня есть на бесконечном цикле (к моему знанию)Почему 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

Все это не стандартное C++, я бы серьезно рекомендовал вам использовать классы и функции из [Стандартной библиотеки ввода-вывода] (http://en.cppreference.com/w/cpp/io). Также обратите внимание, что цикл 'while (true)' никогда не заканчивается, вероятно, это не то, что вы хотите сделать. –

+0

Проверьте возврат ошибок при каждом системном вызове (в частности, «CreateFile»). –

+2

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

ответ

4

Флаг 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 документации тщательно, она стоит, потому что она играет центральную роль в окне IO Вселенной: https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx

взгляд также добавить: https://stackoverflow.com/a/9891875/1922748

0

Как упоминал Мартин Джеймс, из MSDN: CREATE_NEW

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

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

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

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

Смежные вопросы