objective C按字节顺序比较2个文件

时间:2013-03-13 13:54:16

标签: objective-c

此代码应加载2个文件并按字节比较并输出差异,但由于某种原因,即使使用相同的文件并且似乎忽略了我的格式,它也会输出差异。

非常感谢任何帮助。

感谢。

int main(int argc, const char * argv[])
{
    @autoreleasepool {
    NSString *pathA = [[NSBundle mainBundle] pathForResource:@"original/testfile" ofType:@""];
    NSFileHandle *fileA = [NSFileHandle fileHandleForReadingAtPath:pathA];
    NSString *pathB = [[NSBundle mainBundle] pathForResource:@"updated/testfile" ofType:@""];
    NSFileHandle *fileB = [NSFileHandle fileHandleForReadingAtPath:pathB];
    unsigned long long sizeofFile = [fileA seekToEndOfFile];
    [fileA seekToFileOffset:0];
    [fileB seekToFileOffset:0];
    unsigned int fileaValue;
    unsigned int filebValue;
    for (int i = 0; i <= sizeofFile; i++) {
        [[fileA readDataOfLength:1] getBytes:&fileaValue];
        [[fileB readDataOfLength:1] getBytes:&filebValue];
        if (fileaValue != filebValue)
            NSLog(@"File A %02x File B %02x at offset %u:",fileaValue,filebValue,i);
    }
    [fileA closeFile];
    [fileB closeFile];
    }
return 0;
}

示例输出

 2013-03-13 13:50:50.580 compareFile[12055:303] File A 7fce File B 5fbff9ce at offset 0:
 2013-03-13 13:50:50.581 compareFile[12055:303] File A 7ffa File B 5fbff9fa at offset 1:

1 个答案:

答案 0 :(得分:1)

我认为问题可能是你选择的数据类型(如果你想要一个字节然后使用uint8_t),几乎可以肯定你在<=循环中使用了for

uint8_t fileaValue;
uint8_t filebValue;
for (unsigned i = 0; i < sizeofFile; i++) {   // NOT <=
    [[fileA readDataOfLength:1] getBytes:&fileaValue];
    [[fileB readDataOfLength:1] getBytes:&filebValue];
    if (fileaValue != filebValue)
        NSLog(@"File A %02x File B %02x at offset %u:", (unsigned)fileaValue, (unsigned)filebValue,i);
}

(请注意NSLog()调用中的强制转换,以便正确打印值。

同时检查readDataOfLength是否成功,因为文件I / O是导致错误的常见原因。

相关问题