Я столкнулся с кодом, похожим на этот (сокращено для MCVE):
HANDLE hFile = CreateFileW(argv[1], GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
// Note: FILE_FLAG_NO_BUFFERING and FILE_FLAG_WRITE_THROUGH are not present
DWORD dwWritten;
WCHAR wBOM = 0xFEFF, wString[100] = L"Hello World!";
SetFilePointer(hFile, 0, NULL, FILE_BEGIN);
WriteFile(hFile, &wBOM, sizeof(WCHAR), &dwWritten, NULL);
WriteFile(hFile, wString, wcslen(wString) * sizeof(WCHAR), &dwWritten, NULL);
FlushFileBuffers(hFile);
CloseHandle(hFile);
Последняя часть показалась мне педантичной, так как у меня было впечатление, что вызов CloseHandle
сбросит любой буферизованный вывод на диск (аналогично fclose(FILE *)
, где явно задокументировано *1007* стандартом C, что буферы будут очищеныОднако я не смог найти эту информацию в документации для CloseHandle
на MSDN.
Итак, необходим ли вызов FlushFileBuffers
непосредственно перед закрытием дескриптора файла, необходимый дляизбежать отбрасывания буферизованного вывода?