fseek() вызывает перекрытие данных

Я читаю указанный фрагмент файла с помощью функций fseek и fread, а затем записываю его в другой файл. По какой-то причине в целевом файле я получаю около 20 байтов перекрытия между каждым написанным в нем фрагментом.

Кто-нибудь, пожалуйста, помогите мне определить источник этого мусора? Это определенно вызвано функцией fseek, но я не могу понять, почему.

FILE *pSrcFile; 
FILE *pDstFile; 

int main()
{
int buff[512], i;
long bytesRead;

pSrcFile = fopen ( "test.txt" , "r" );
pDstFile = fopen ( "result1.txt", "a+");

for(i = 0; i < 5; i++)
{
    bytesRead = _readFile ( &i, buff, 512);
    _writeFile( &i, buff, bytesRead);
}

fclose (pSrcFile);
fclose (pDstFile);
}

int _readFile (void* chunkNumber, void* Dstc, long len) 
{
int bytesRead;
long offset = (512) * (*(int*)chunkNumber);

fseek( pSrcFile, offset, SEEK_SET);

bytesRead = fread (Dstc , 1, len, pSrcFile);

return bytesRead;
}

int _writeFile (void* chunkNumber, void const * Src, long len) 
{
int bytesWritten;
long offset = (512) * (*(int*)chunkNumber);

bytesWritten = fwrite( Src , 1 , len , pDstFile );

return bytesWritten;
}

person fl0sT    schedule 11.06.2011    source источник


Ответы (2)


Я предполагаю, что вы работаете в Windows и страдаете от пороков текстового режима Windows. Добавьте "b" к флагам, которые вы передаете fopen, т.е.

pSrcFile = fopen ( "test.txt" , "rb" );
pDstFile = fopen ( "result1.txt", "a+b");
person R.. GitHub STOP HELPING ICE    schedule 11.06.2011

Кажется, вы читаете из Dest файла

bytesRead = fread (Dstc , 1, len, pSrcFile);

и запись в источник

bytesWritten = fwrite( Src , 1 , len , pDstFile );

Вероятно, вам нужно изменить Dest на Src.

person ilia    schedule 12.06.2011