Написал программку для сравнения файлов. только не работает нормально почему-то. сверяет только до адресу 0xFFF. кому не лень разобраться, скажите, плиз, что не так? вроде ведь все правильно.. Код (Text): #include <stdio.h> #include <windows.h> #define MAX_FILES 10 int main(int argc, char *argv[]) { HANDLE file_handles[MAX_FILES]; HANDLE file_maps[MAX_FILES]; unsigned char *file_pmems[MAX_FILES]; unsigned char file_bytes[MAX_FILES]; unsigned int i, sz_file, err; unsigned int pp = 0; unsigned char *cur_ptr; unsigned char lst; if (argc-1 > MAX_FILES) { printf("Error: MAX_FILES = 5\n"); return 1; } if (argc < 3) { printf("Error: argc < 3\n"); return 1; } for (i = 0; i < argc-1; i++) { file_handles[i] = CreateFile(argv[i+1], GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0); if (file_handles[i] == 0xFFFFFFFF) { printf("Error: CreateFile\n"); return 1; } } for (i = 0; i < argc-1; i++) { file_maps[i] = CreateFileMapping(file_handles[i], 0, PAGE_READONLY, 0, 0, 0); if (file_maps[i] == 0) { printf("Error: CreateFileMapping\n"); return 1; } } for (i = 0; i < argc-1; i++) { file_pmems[i] = MapViewOfFile(file_maps[i], FILE_MAP_READ, 0, 0, 0); if (file_pmems[i] == 0) { printf("Error: MapViewOfFile\n"); } } sz_file = GetFileSize(file_handles[0], 0); while (pp < sz_file) { for (i = 0; i < argc-1; i++) { cur_ptr = file_pmems[i]; cur_ptr += pp; file_bytes[i] = *cur_ptr; } lst = file_bytes[0]; err = 0; for (i = 1; i < argc-1; i++) { if (file_bytes[i] != lst) { err = 1; break; } lst = file_bytes[i]; } if (err) { printf("%X:\t", pp); printf("%X", file_bytes[0]); for (i = 1; i < argc-1; i++) printf("\t%X", file_bytes[i]); putchar('\n'); } ++pp; } for (i = 0; i < argc-1; i++) { UnmapViewOfFile(file_pmems[i]); CloseHandle(file_maps[i]); CloseHandle(file_handles[i]); } return 0; }
TerraIncognita Токшо проверил, всё работает правильно, файлы размером 48 мб. Может они у тебя различны?
а зачем есть же Z:\>fc /? Сравнение двух файлов или двух наборов файлов и вывод различий между ними. FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LINE]] [/T] [/u] [/W] [/nnnn][диск1:][путь1]имя_файла1 [диск2:][путь2]имя_файла2 FC /B [диск1:][путь1]имя_файла1 [диск2:][путь2]имя_файла2 /A Вывод только первой и последней строк для каждой группы различий. /B Сравнение двоичных файлов. /C Сравнение без учета регистра символов. /L Сравнение файлов в формате ASCII. /LBn Максимальное число несоответствий для заданного числа строк. /N Вывод номеров строк при сравнении текстовых файлов ASCII. /OFF[LINE] Не пропускать файлы с установленным атрибутом "Автономный". /T Символы табуляции не заменяются эквивалентным числом пробелов. /U Сравнение файлов в формате UNICODE. /W Пропуск пробелов и символов табуляции при сравнении. /nnnn Число последовательных совпадающих строк, которое должно встретиться после группы несовпадающих. [диск1:][путь1]имя_файла1 Указывает первый файл или набор файлов для сравнения. [диск2:][путь2]имя_файла2 Указывает второй файл или набор файлов для сравнения.