Сравнение файлов

Тема в разделе "Delphi - FAQ", создана пользователем Vadik(R), 19 апр 2008.

  1. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Люди, как узнать идентичны ли два файла или нет? Я имею в виду само содержание файлов, а не дату создания или другие атрибуты. Вот, например, я долго качал файл размером 178Мб с одного сайта. И скачал этот же файл из локалки намного быстрее. Я хочу узнать, одинаковы ли эти два файла или разные. Может не смысла качать из внешки если одинаковые. Вот составил такой код: [codebox]program compare;
    uses
    SysUtils;

    {$APPTYPE CONSOLE}

    var i : longint;
    f1,f2 : file of char;
    c,d : char;
    begin
    assign(f1,'C:\file1.avi');
    reset(f1);
    assign(f2,'C:\file2.avi');
    reset(f2);
    while not eof(f1) do
    begin
    i:=i+1;
    read(f1,c);
    read(f2,d);
    if c<>d then
    begin
    writeln(ошибка в байте: ',i,'.');
    readln;
    halt
    end
    end;
    if (filesize(f1)<>filesize(f2)) or (NOT (eof(f1))) or (NOT (eof(f2))) then
    begin
    writeln('ошибка в размерах фалов.');
    readln;
    halt
    end;
    close(f1);
    close(f2);
    write('файлы идентичны.')
    readln;
    end.[/codebox]
    Но это тупое сравнение, по-моему оно длилось около 1.5 часа! Ясно дело есть быстрее, так как если копировать файл размером 100 Мб из одной папки в другую, то это занимает секунды. Пожалуйста скажите как написать программу сравнивающую два файла быстрее. Или функцию, если такая есть!
     
  2. Yason

    Yason Гость

    Если просто сравнить два файла - можно использовать Total Commander: Files - Compare by content.
    Если хочется сделать свою программу - вот пара советов по улучшению быстродействия.
    1. Считывать из файла лучше не один байт, а сразу много, где-нибудь порядка нескольких килобайт (например, 4кб). Для винчестера что первое, что второе - один оборот.
    2. Сравнивать тоже лучше не побайтово, а массивами, например при помощи APIшной функции strncmp.
    3. Размеры файлов логичнее сравнивать в самом начале, т.к. если они разные -- файлы тоже разные, и дальше можно не проверять.
     
  3. Vadik(R)

    Vadik(R) Well-Known Member

    Регистрация:
    12 дек 2007
    Сообщения:
    483
    Симпатии:
    0
    Спасибо!

    P.S. 5 спасибо = 1 плюс. Жди ещё 4 спасиба от меня :lol:
     
Загрузка...

Поделиться этой страницей