Доброе время суток, есть класс лога, поставили задачу усекать его при достижении определенного размера написал вот такую методу:
Открывается файл вот таким образом: 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, чего то я незнаю
.
Подскажите пожалуйста кто знает. Спасибо.
Извиняюсь за глупый вопрос уже нашел косяк нужно открывать :
_wfopen_s(stream,name_file, L"a+, ccs=UTF-8" );
И тогда все работает, под конец рабочего дня момент затупения .