如何解决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,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,pDstFile );
return bytesWritten;
}
解决方法
我猜您正在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,pDstFile );
可能必须将Dest
更改为Src
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。