【发布时间】:2013-12-20 06:10:47
【问题描述】:
我有两个二进制文件,我想逐字节比较它们。为此,我想出了以下代码:
int CompareFiles(char *pFname1, char *pFname2)
{
FILE *pFile1,*pFile2;
long lSize1, lSize2; // file length
int i=0;
char tmp1, tmp2;
pFile1 = fopen(pFname1,"r");
pFile2 = fopen(pFname2,"r");
// obtain file size:
fseek (pFile1 , 0 , SEEK_END);
lSize1 = ftell (pFile1);
rewind (pFile1);
// obtain file size:
fseek (pFile2 , 0 , SEEK_END);
lSize2 = ftell (pFile2);
rewind (pFile2);
if (lSize1 != lSize2) {
printf("File sizes differ, %d vs. %d\n",lSize1,lSize2);
return ( ERROR );
}
for (i=0;i<lSize1;i++) {
fread(&tmp1, sizeof(char), 1, pFile1+i);
fread(&tmp2, sizeof(char), 1, pFile2+i);
if (tmp1 != tmp2) {
printf("%x: tmp1 0x%x != tmp2 0x%x\n",i , tmp1, tmp2);
}
}
return ( OK );
}
但由于某种原因,文件中的指针似乎没有前进,并且在for 循环的整个长度内不断比较相同的字节。为什么这样?我在这里做错了什么?
【问题讨论】:
-
提示:使用 memcmp 而不是遍历每个字节:cplusplus.com/reference/cstring/memcmp/?kw=memcmp
标签: c file comparison fread