Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
144 / 129 / 46
Регистрация: 12.08.2015
Сообщений: 1,203
Записей в блоге: 1
1

Сравнить бинарные файлы и узнать разницу в процентах

04.08.2017, 13:43. Показов 1474. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую! У меня следующий вопрос: имеется два EXE-файла. Можно ли как-то провести сравнение и узнать их разницу в процентах, и если да, то насколько сложно такое реализовать?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.08.2017, 13:43
Ответы с готовыми решениями:

Есть в PHP функция, показывающий разницу между двумя строками в процентах?
Есть в PHP функция, показывающий разницу между двумя строками в процентах? // например ...

Сравнить два текста, разницу выделить
Здравствуйте, надо сравнить 2 текста, 1-й исходный, 2-й немного измененный, удаленные фрагметы с...

Как сравнить разницу двух DateTime?
Есть 2 переменные DataTime. Надо выяснить прошло ли от одного DataTime до другого больше 12 часов....

Как узнать нагрузку на ядро CPU в процентах?
Нужно узнать нагрузку на ядро (в моем случае оно одно), попробовал вот так: ps aux | awk '{s +=...

6
Айлурофил
441 / 375 / 107
Регистрация: 27.05.2017
Сообщений: 2,157
Записей в блоге: 1
04.08.2017, 15:05 2
Вопрос допускает множественное токование. Конкретнее.
1
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
04.08.2017, 16:37 3
Лучший ответ Сообщение было отмечено RostorLuxor как решение

Решение

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm1.Button1Click(Sender: TObject);
var f1,f2:file;
    s1,s2:integer;
    p:double;
begin
assignfile(f1,'1.exe');
reset(f1,1);
s1:=filesize(f1);
assignfile(f2,'2.exe');
reset(f2,1);
s2:=filesize(f2);
closefile(f1);
closefile(f2);
Label1.Caption:='размер f1='+inttostr(s1)+' байт';
Label2.Caption:='размер f2='+inttostr(s2)+' байт';
p:=abs(s1-s2);
if s1>s2 then p:=p/s1*100
else p:=p/s2*100;
Label3.Caption:='разница='+formatfloat('0',p)+'%';
end;
1
2 / 2 / 0
Регистрация: 18.07.2012
Сообщений: 27
04.08.2017, 17:07 4
Разница по содержимому:

Кликните здесь для просмотра всего текста

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
uses Math
 
function CompareFiles(const Filename1, Filename2: String): Integer;
var FileStream1, FileStream2: TFileStream;
    FileSize1, FileSize2, I, II: Int64;
    FileData1, FileData2: TBytes;
    DifferentBytes: Int64;
begin
  Result:= -1;
  if FileExists(Filename1) and FileExists(Filename2) then begin
    try
      FileStream1:= TFileStream.Create(Filename1, fmOpenRead);
      FileStream2:= TFileStream.Create(Filename2, fmOpenRead);
 
      FileSize1:= FileStream1.Size;
      FileSize2:= FileStream2.Size;
 
      SetLength(FileData1, FileSize1);
      SetLength(FileData2, FileSize2);
      FileStream1.Read(FileData1[0], FileSize1);
      FileStream2.Read(FileData2[0], FileSize2);
 
      DifferentBytes:= Abs(FileSize1 - FileSize2);
      II:= Min(FileSize1, FileSize2);
 
      for I := 0 to II-1 do
        if FileData1[i] <> FileData2[i]
          then DifferentBytes:= DifferentBytes + 1;
 
      Result:= Round(DifferentBytes / Max(FileSize1, FileSize2) * 100);
 
    finally
      FileStream1.Free;
      FileStream2.Free;
      SetLength(FileData1, 0);
      SetLength(FileData2, 0);
    end;
  end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 if OpenDialog1.Execute then Edit1.Text:= OpenDialog1.FileName;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  if OpenDialog2.Execute then Edit2.Text:= OpenDialog2.FileName;
end;
 
procedure TForm1.Button3Click(Sender: TObject);
var Percent: Integer;
begin
  Percent:= CompareFiles(Edit1.Text, Edit2.Text);
  if Percent <> -1 then
    ShowMessage('Файлы различны на ' + IntToStr(Percent) + '%');
end;
1
144 / 129 / 46
Регистрация: 12.08.2015
Сообщений: 1,203
Записей в блоге: 1
05.08.2017, 10:33  [ТС] 5
Puporev, спасибо)

Добавлено через 17 часов 9 минут
Цитата Сообщение от hexep Посмотреть сообщение
FileData1, FileData2: TBytes;
Здесь пишет ошибку.
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
05.08.2017, 10:45 6
Запуск консольного приложения внутри
0
144 / 129 / 46
Регистрация: 12.08.2015
Сообщений: 1,203
Записей в блоге: 1
05.08.2017, 10:54  [ТС] 7
Puporev, всё, уже разобрался.
0
05.08.2017, 10:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.08.2017, 10:54
Помогаю со студенческими работами здесь

Как узнать загруженность процессора по процессам в процентах?
Подскажите пожалуйста скрип который получал бы список процессов и загрузку проца по ним.

Сравнить два списка из Excel и вывести разницу между ними
Есть два списка, грузятся в DatagridView1 с первой книги Excel и в DataGridView2 со второй книги...

Как сравнить первые столбцы двух книг Экселя и выявить разницу?
Добрый день, уважаемые! Прошу вашей помощи в следующей задаче: есть 2 файла в одной папке:Old.xls...

Как сравнить 2 столбца и при совпадении вычислить разницу и относительное значение
Здравствуйте! Помогите пожалуйста,сделать лаб.работу. Во вложении есть таблица,по данным которой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru