Запись в файл и аварийное завершение работы

 
Написал Сборщик тиков - эксперт, собирающий тики.
Алгоритм простой - открываем цсв-файл, пишем тики, сбрасываем на диск. В деините - закрываем файл.

Эксперт работает круглосуточно.

Вчера ночью выключили свет, вместе с ним выключился и комп (странно, правда? =).
Утром я запустил МТ, и обнаружил в файлах с тиками кучу "мусора": от случайных нечитаемых символов, до кусков кода и логов терминала.
Есть подозрение, что в файл записалось всё, что когда-то было в буфере обмена.
Хотя, не уверен...

К сожалению, мусор я сразу удалил, сохранить кусок для анализа не додумался.
Но, думаю, воспроизвести ситуацию будет не сложно =)

Вопрос, собственно, в следующем: нормальная ли это ситуация, и можно ли с этим что-то сделать (кроме закрытия файла каждый тик)?
МТ билд 194 от 15.06.2006, WinXP SP2
 
Насколько замечал, всегда так - если не закрыть файл, то все, что в него писалось после открытия не сохраняется, даж если не свет отключить, а аварийно завершить работу программы. А насчет того, чтобы разгрести этот мусор - задача интересная:-)
 
Это стандартная проблема для любой программы, работающей с открытыми файлами.
Как простое решение - переоткрывать файл каждую минуту (не на каждый тик).
 
А что изменится?
Если в момент "аварии" файл будет открыт, в него всё равно попадёт мусор.
Или я ошибаюсь?
 

Интересно, елси файл открыт для чтения, то в него тоже может попасть мусор?
Если иметь 2 файла и писть в них одно и то же, то испортиться может только один.

 
SK. писал (а):

Интересно, елси файл открыт для чтения, то в него тоже может попасть мусор?
Если иметь 2 файла и писть в них одно и то же, то испортиться может только один.

У меня было открыто 2 файла. И испортились оба.
 
а если собирать тики в массив, затем раз в минуту сбрасывать в файл, тогда вероятность аварийного завершения работы при открытом файле значительно снижается. А если иметь два файла, то в один момент времени открыт только один, поэтому мусор может попасть только в один файл. Остается задача - при запуске сборщика определить в каком из них есть мусор, а в каком нет.
 
С массивом - вариант. Надо подумать над реализацией.
Вероятность действительно будет минимальной
 
Integer писал (а):
а если собирать тики в массив, затем раз в минуту сбрасывать в файл, тогда вероятность аварийного завершения работы при открытом файле значительно снижается. А если иметь два файла, то в один момент времени открыт только один, поэтому мусор может попасть только в один файл. Остается задача - при запуске сборщика определить в каком из них есть мусор, а в каком нет.

Раз в минуту - это то, что предлагает Renat.
Я говорю о том, чтобы записывать информацию в 2 одинаковых файла - сначала в один ( и закрыть), а потом - в другой.
Если ПК взорвётся в какой-то момент, то это может повредить лишь одному из открытых файлов.
 
SK, я предложил массив не в качестве альтернативы второго файла, а в дополнение. Моя фраза "А если иметь " - неудачная. Сверхнадежно делать массив и два файла. Только надо найти способ определить наличие мусора в файле.
 
Флаг, включаемый перед записью, и обнуляемый после успешного закрытия?
Причина обращения: