<Name = "simple"/>
не является допустимым элементом XML. Допустимый элемент XML - это что-то вроде
<LogFormat>
<Name value="simple"/>
<Format value="simple"/>
</LogFormat>
или
<LogFormat name="simple" format="simple"/>
</LogFormat>
. Таким образом, файл конфигурации сервера трафика logs_xml.config
не в формате XML, и tinyxml не может его проанализировать.
Вы не указали среду разработки, таким образом:
Потоки IO имеют a .Flush
метод, который делает то, что Вы хотите.
Существует FlushFileBuffers
звоните, который берет дескриптор файла в качестве аргумента.
РЕДАКТИРОВАНИЕ (на основе комментария от OA): FlushFileBuffers не нужны административные привилегии; это делает, только если дескриптор передал ему, дескриптор для объема, не для единственного файла.
Из документов Microsoft Вы использовали бы _flushall и ссылку в COMMODE.OBJ, чтобы гарантировать, что все буферы посвятили себя диску.
Вам следует не исправить это во время закрытия файла. Windows будет кешировать, если вы не откроете файл, передав FILE_FLAG_WRITE_THROUGH
в CreateFile ().
Вы также можете передать FILE_FLAG_NO_BUFFERING
; это говорит Windows не хранить копию байтов в кэше.
Это более эффективно, чем FlushFileBuffers (), согласно документации CreateFile на MSDN.
См. Также буферизацию файлов и кэширование файлов на MSDN.
You should also note, that your data might not get flushed to the actual disk, even when invoking a flush method of your frameworks API.
Calling the flush method will only tell the kernel to flush its pages to disk. However, if you have the disk write-cache turned on, it is allowed to delay the actual writing process indefinitely.
In order to ensure that your data gets written to the physical layer you have to turn of the write cache in your operating system. This most often comes with a performance penalty up to one or two orders of magnitude when dealing with a lot of small io-operations. Поддержка батареи (UPS) или диски, которые принимают команды для очистки дискового кэша записи, являются еще одним вариантом решения этой проблемы.