Как сравнить файлы?

Тема в разделе "WASM.WIN32", создана пользователем Bortnikov, 18 мар 2007.

  1. Bortnikov

    Bortnikov New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2007
    Сообщения:
    3
    Помогите начинающему.
    Пытаюсь освоить работу с файлами.
    Такая задача - есть 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

    ;Во как!
     
  2. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    Код (Text):
    1. lea esi,f1
    2. lea edi,f2
    3. mov ecx,Len_Of_File
    4. repe cmpsb
    5. jnz @notequal
    6. ; участки памяти равны.
    7. @notequal:
    8. ; не равны.
     
  3. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    хешированием
     
  4. Span

    Span New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2006
    Сообщения:
    134
    ИМХО не очень хорошо сравнивать "текстовые" файлы побайтно.

    Может быть отлитчие незначительное, например в лишнем переводе каретки в конце файла.
    Если надо сравнить файлы "по содержанию" - сперва надо бы сделать преобразования к какому-либо стандартному виду. Например убрать все последовательности пробелов (заменить на один пробел), переводы строк убрать все с начала и до конца, не забыть про dos2unix и большие и маленькие быквы. Кроме того есть много символов в ASCII, которые выглядят одинаково, но имеют разные номера.

    Почитай как работают спам-фильтры - сможешь сравнивать файлы - и получать относительный коефф. совпадения.
     
  5. dev_null

    dev_null New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2007
    Сообщения:
    5
    у тебя же только один файл в примере открывается ....

    if buf=! ADDR f2 ты же сравниваешь буфер с именем файла !!!!, а даже если это два буффера тот так сравнивать разве что в C++ можно ..... и то если операторы переопределить и типы завести.

    твой пример не рабочаий в принципе :dntknw: