Используйте для этого файл с отображением в памяти.С UNIX mmap () С Windows MapViewOfFile ().Это даст вам указатель в памяти, который отображается на содержимое файла.Почему это хорошая идея?Вам не нужно выделять место для файла, используя malloc () или new ().Файлы могут быть любого размера, хорошо 32-битный лимит, но должна быть 64-битная версия.Вы можете сравнивать файлы, используя
memcmp (file1, file2, sizeoffile1)
Наслаждайтесь ...
edit - добавлен некоторый код в C
#include <stdio.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
int
cmpfile(char *file1, char *file2)
{
int result = -1;
int fd1, fd2;
off_t size1, size2;
char *ptr1, *ptr2;
fd1 = open(file1, O_RDONLY);
if (fd1 == -1) {
fprintf(stderr, "Failed to open file '%s' - %s\n", file1, strerror(errno));
goto error1;
}
fd2 = open(file2, O_RDONLY);
if (fd2 == -1) {
fprintf(stderr, "Failed to open file '%s' - %s\n", file2, strerror(errno));
goto error2;
}
size1 = lseek(fd1, 0, SEEK_END);
if (size1 == (off_t)-1) {
fprintf(stderr, "Failed to seek to end of file '%s' - %s\n", file1, strerror(errno));
goto error3;
}
size2 = lseek(fd2, 0, SEEK_END);
if (size2 == (off_t)-1) {
fprintf(stderr, "Failed to seek to end of file '%s' - %s\n", file2, strerror(errno));
goto error4;
}
if (size1 != size2) {
fprintf(stderr, "File sizes mimatched\n");
goto error5;
}
ptr1 = mmap((void *)0, size1, PROT_READ, MAP_SHARED, fd1, 0);
if (ptr1 == MAP_FAILED) {
fprintf(stderr, "Failed to map file '%s' - %s\n", file1, strerror(errno));
goto error6;
}
ptr2 = mmap((void *)0, size2, PROT_READ, MAP_SHARED, fd2, 0);
if (ptr2 == MAP_FAILED) {
fprintf(stderr, "Failed to map file '%s' - %s\n", file2, strerror(errno));
goto error7;
}
if (memcmp(ptr1, ptr2, size1) == 0) {
result = 0;
}
munmap(ptr2, size2);
error7:
munmap(ptr1, size1);
error6:
error5:
error4:
error3:
close(fd2);
error2:
close(fd1);
error1:
return result;
}
int main(int argc, char **argv)
{
int result = -1;
if (argc == 3) {
result = cmpfile(argv[1], argv[2]);
if ( result == 0 ) {
printf("Files match\n");
} else {
printf("Files don't match\n");
}
} else {
fprintf(stderr, "Usage: %s <file1> <file2>\n", argv[0]);
}
return result;
}