Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Непрерывная запись в файл


Страницы:   1 2 3 4

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 дискету.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо