![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Непрерывная запись в файл
unknowing © (2008-02-11 18:52:00)Всем привет! У меня следующаяя проблема: с СОМ-порта непрерывно приходят данные, которые я записываю в файл. В случае остановки записи программой (CloseFile) или выхода из программы все нормально. Интересует ситуация когда пропадает питание и комп выключается: файл не записывается на диск... Как защищаться от такой ситуации?
clickmaker (2008-02-11 20:11:00) [41]
> Потому что запись в каталог производится после закрытия
> файла
да щас.
Запись производится после вызова FlushFileBuffers или после WriteFile, если файл был открыт с флагом FILE_FLAG_NO_BUFFERING
Для слежение за логами во время работы программы очень полезно.
А иначе - да, только после закрытия файла увидишь
unknowing (2008-02-11 20:09:00) [42]
> Ну, основная часть данных сохраниться? Фиг с ней, с текущей,
> важно весь длительный запуск не потерять. Или и здесь не
> гарантируется?
Anatoly Podgoretsky (2008-02-11 20:06:00) [43]> clickmaker (11.02.2008 19:57:20) [20]
Потому что запись в каталог производится после закрытия файла, а НТФС к тому же журналируемая система. Иногда производится промежуточная запись, но ничего не гарантируется.
Гарантируется только FlushFileBuffers flushes this file's buffers. и более ничего, функция по сути полезна, только для коммуникационных устройств и именованых трубопроводов.
clickmaker (2008-02-11 20:03:00) [44]
> [22] ketmar © (11.02.08 20:01)
нафига оно под пингвином? там fflush() есть )
ketmar (2008-02-11 20:01:00) [45]что, write thru никто не пробовал? а я надеялся, что мне расскажут, подходит ли оно. ладно, не вышло. %-)
---
Understanding is not required. Only obedience.
unknowing (2008-02-11 19:57:00) [46]
> Anatoly Podgoretsky © (11.02.08 19:55) [19]
Ну, основная часть данных сохраниться? Фиг с ней, с текущей, важно весь длительный запуск не потерять. Или и здесь не гарантируется?
clickmaker (2008-02-11 19:57:00) [47]
> [19] Anatoly Podgoretsky © (11.02.08 19:55)
почему?
Anatoly Podgoretsky (2008-02-11 19:55:00) [48]> clickmaker (11.02.2008 19:42:15) [15]
flush не гарантия.
unknowing (2008-02-11 19:51:00) [49]
> clickmaker © (11.02.08 19:46) [17]
Ясно! Так как инженеры до информации жадны, то flush после каждой записи - это вариант! :)
clickmaker (2008-02-11 19:46:00) [50]
> [16] unknowing (11.02.08 19:44)
ну грубо говоря, нужно определить минимальную значимую единицу информации, порцию то есть.
Н-р, одна строка. Или один экземпляр структуры. После записи которой делать flush.
unknowing (2008-02-11 19:44:00) [51]
> clickmaker © (11.02.08 19:42) [15]
а flush после каждой записи вариант?
clickmaker (2008-02-11 19:42:00) [52]
> [13] Anatoly Podgoretsky © (11.02.08 19:38)
> Только закрытие/открытие файла гарантирует его целостность
зависит от структуры.
Если есть некий check-point, то периодический flush - вполне себе решение
unknowing (2008-02-11 19:40:00) [53]
> Anatoly Podgoretsky © (11.02.08 19:38) [13]
Ясно. А жаль!.. Но, к сожалению, в случае с закрытием придется всю программную логику перерыть, а это не вариант
Anatoly Podgoretsky (2008-02-11 19:38:00) [54]Только закрытие/открытие файла гарантирует его целостность.
ketmar (2008-02-11 19:37:00) [55]>[11] unknowing (2008-02-11 19:35:00)
>Дома МСДН не держу
в интернетах выложено, да.
---
Understanding is not required. Only obedience.
unknowing (2008-02-11 19:35:00) [56]
> clickmaker © (11.02.08 19:32) [10]
Дома МСДН не держу.. :( Завтра на работе гляну. Спасибо!
clickmaker (2008-02-11 19:32:00) [57]
> [1] Джо © (11.02.08 18:56)
> Если ОС >= Win 2003, то можно время от времени вызывать
> FlushFileBuffers
???
Client Requires Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, or Windows 95.
(c) MSDN
ketmar (2008-02-11 19:30:00) [58]попробовать режим WRITETHRU (см. help по CreateFile() ).
---
Understanding is not required. Only obedience.
unknowing (2008-02-11 19:19:00) [59]
> Palladin © (11.02.08 19:11) [7]
Я от выключения компьютера защищаюсь. Завтра испытания, а ноутбук у меня с поломанной батареей. Испытания ~ 4 часа непрерывно, если в конце питание пропадет - писец, все пропало :(
Palladin (2008-02-11 19:11:00) [60]хочешь максимальной сохранности принятых данных - придется. где ты вообще видел скорость приема COM порта быстрее чем запись даже на ту 3.5 дискету.