Некорректная запись в файл
От: _vanger_  
Дата: 20.06.11 20:28
Оценка:
Здравствуйте.

Есть программа, работающая круглосуточно, периодически производящая некоторые вычисления, пишущая о своих успехах в текстовый файл. Эта запись реализована примитивным логгером, представляющем собой класс, содержащий функцию записи очередного сообщения в текущий файл лога(который меняется по прошествии определённого времени). Наблюдается странный плохо воспроизводимый глюк: при длительной работе в файле лога отсутствуют некоторые строки. Причём одни и те же. Т.е. должно быть
aaa1
bbb1
ccc1
---
aaa2
bbb2
ccc2
...

а есть
aaa1
ccc1
---
aaa2
ccc2
...


Вот функция записи
void Logger::write( const char *format, ... )
{
        static bool newFile = true;
    static bool firstTime = true;

        if( timer.timePassed( period ) || firstTime )
    {
        newFile = true;

        if( !oldLogName.empty() )
            remove( oldLogName.c_str() );
        oldLogName = curLogName;
        curLogName = timer.getTimeStr();
        curLogName += ".txt";
        timer.noteDownTime();

        firstTime = false;
    }

    if( FILE *file = fopen( curLogName.c_str(), newFile ? "w" : "a" ) )
    {
        newFile = false;

        va_list args;
        va_start( args, format );
        vfprintf( file, format, args );
        va_end( args );

        fclose( file );
    }
}


Не подскажете, с чем может быть связано такой поведение?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.