C fseek()导致数据重叠

C fseek()导致数据重叠,c,fseek,C,Fseek,我用fseek和fread函数读取一个指定的文件块,然后将其写入另一个文件。出于某种原因,在目标文件中,我得到了写入其中的每个块之间大约20个字节的重叠 有谁能帮我确定这些垃圾的来源吗?这肯定是由fseek函数引起的,但我不知道为什么 FILE *pSrcFile; FILE *pDstFile; int main() { int buff[512], i; long bytesRead; pSrcFile = fopen ( "test.txt" , "r" ); pDstFile =

我用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;
}
文件*pSrcFile;
文件*pDstFile;
int main()
{
int buff[512],i;
漫长的过去;
pSrcFile=fopen(“test.txt”、“r”);
pDstFile=fopen(“result1.txt”,“a+”);
对于(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字节读取;
长偏移量=(512)*(*(int*)chunkNumber);
fseek(pSrcFile、offset、SEEK_SET);
bytesRead=fread(Dstc,1,len,pSrcFile);
返回字节读取;
}
int_writeFile(void*chunkNumber,void const*Src,long len)
{
int字节;
长偏移量=(512)*(*(int*)chunkNumber);
bytesWrite=fwrite(Src,1,len,pDstFile);
返回已写入的字节;
}

我猜你是在Windows上,正忍受着Windows文本模式的邪恶。在传递给
fopen
的标志中添加
“b”
,即

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

您似乎正在读取
Dest
文件

bytesRead = fread (Dstc , 1, len, pSrcFile);
和写信给来源

bytesWritten = fwrite( Src , 1 , len , pDstFile );
可能您必须将
Dest
更改为
Src