Вопрос по работе с файлами на Си
От: agg  
Дата: 26.11.09 13:00
Оценка:
Доброе время суток, есть класс лога, поставили задачу усекать его при достижении определенного размера написал вот такую методу:
Открывается файл вот таким образом: wfopen_s(stream,name_file, L"a, ccs=UTF-8" );
bool CDumper::TurncateLog(FILE **stream, const wchar_t *name_file)
{
    bool ret_val=false;
    if(*stream)
    {
        int i=fseek(*stream,0,SEEK_END);
        long size=ftell(*stream);
        if( size>=MAX_DUMP )
        {
            long sz_copy=size-(size/2);
            char* buff=new char[sz_copy]; 
            int i=fseek(*stream,sz_copy,SEEK_SET);
            long sz2=ftell(*stream);   // для теста чтобы посмотреть куда поставил курсор
            size_t sz_read=fread(buff,sizeof(char),sz_copy, *stream);  //возвращает 0, пробовал играть размером бесполезно
            if(sz_read)
            {
                fclose(*stream);
                int ulink_ret=_wunlink(name_file);
                if(!ulink_ret)
                {
                    int err=_wfopen_s(stream,name_file, L"a, ccs=UTF-8" );
                    if(!err)
                    {
                        fwrite(buff,sizeof(char),sz_read,*stream);
                        ret_val=true;
                    }
                }
            }
            delete[] buff;            
        }
    }
    return ret_val;
}


То есть пытаюсь сделать простую вещь из существующего файла прочитать половину его начиная от середины в буфер, затем удалить старый файл и записать буфер в новый файл, в ничего не происходит потому как вот эта строка size_t sz_read=fread(buff,sizeof(char),sz_copy, *stream); возвращает всегда 0, чего то я незнаю .
Подскажите пожалуйста кто знает. Спасибо.
Re: Вопрос по работе с файлами на Си
От: agg  
Дата: 26.11.09 13:07
Оценка:
Извиняюсь за глупый вопрос уже нашел косяк нужно открывать :
_wfopen_s(stream,name_file, L"a+, ccs=UTF-8" );


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