Помогите начинающему. Пытаюсь освоить работу с файлами. Такая задача - есть 2 текстовых файла. Их надо сравнить. если содержание одинаковое - мессага 1. если разное - мессага 2. Пока не знаю всех директив. поэтому сам вижу, что-то не то нагородил ручонками своими. Помогите найти ошибку, Может, посоветуйте более профессиональный подход, плиз... максим. .data f1 BYTE "C:\1.txt", 0 f2 BYTE "C:\2.txt", 0 fHandle DWORD ? cRead DWORD ? cWritten DWORD ? buf BYTE BSIZE dup (?) szCaption db "Проверка",0 szText 1 db "Файлы разные",0 szText 2 db "Файлы идентичные",0 .code start: invoke CreateFile, ADDR f1, ;Открываем первый нужный файл GENERIC_READ, ;Для чтения 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 mov fHandle, eax ;Запоминаем Хендл invoke ReadFile, fHandle, ADDR buf, ;Читаем в буфер BSIZE, ADDR cRead, NULL if buf=! ADDR f2 ; Если буфер не равен f2 invoke MessageBox,NULL,ADDR szText1,ADDR szCaption,MB_OK+MB_ICONINFORMATION ; Файлы разные else ; А если файлы одинаковые invoke MessageBox,NULL,ADDR szText2,ADDR szCaption,MB_OK+MB_ICONINFORMATION ; Файлы идентичные invoke CloseHandle, fHandle invoke ExitProcess, 0 end start ;Во как!
Код (Text): lea esi,f1 lea edi,f2 mov ecx,Len_Of_File repe cmpsb jnz @notequal ; участки памяти равны. @notequal: ; не равны.
ИМХО не очень хорошо сравнивать "текстовые" файлы побайтно. Может быть отлитчие незначительное, например в лишнем переводе каретки в конце файла. Если надо сравнить файлы "по содержанию" - сперва надо бы сделать преобразования к какому-либо стандартному виду. Например убрать все последовательности пробелов (заменить на один пробел), переводы строк убрать все с начала и до конца, не забыть про dos2unix и большие и маленькие быквы. Кроме того есть много символов в ASCII, которые выглядят одинаково, но имеют разные номера. Почитай как работают спам-фильтры - сможешь сравнивать файлы - и получать относительный коефф. совпадения.
у тебя же только один файл в примере открывается .... if buf=! ADDR f2 ты же сравниваешь буфер с именем файла !!!!, а даже если это два буффера тот так сравнивать разве что в C++ можно ..... и то если операторы переопределить и типы завести. твой пример не рабочаий в принципе