Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.03.2009, 23:00
juri juri вне форума
Прохожий
 
Регистрация: 07.03.2009
Сообщения: 4
Репутация: 10
По умолчанию поиск сигнатур в файлах

Вот пытаюсь на писать программу которая бы сравнивала 2 файла по первым 64 байтам и выделяла сигнатуры для определения его принадлкжности например у рар rar! и т.д. написал часть программы.
надеюсь на понимание и помощь в продолжении ведь только начинаю
Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, Buttons;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    BitBtn1: TBitBtn;
    OpenDialog1: TOpenDialog;
    BitBtn2: TBitBtn;
    GroupBox2: TGroupBox;
    Label3: TLabel;
    Label4: TLabel;
    OpenDialog2: TOpenDialog;
    BitBtn4: TBitBtn;
    RadioButton1: TRadioButton;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
  public

    { Public declarations }
  end;

var
  Form1: TForm1;
  file1: file of byte;
  file2: file of byte;
  fil1: string;
  fil2: string;
  sign1: array[0..128] of byte;
  sign2: array[0..128] of byte;
  sign3: array[0..128] of string;
  exstring: integer;
  HexString,HexString2, lab1, lab2, lab3, lab4: string;

  a, c, d: integer;
  b, e, f: byte;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
opendialog1.Execute;
fil1:=opendialog1.FileName;
groupbox1.Caption:=opendialog1.FileName;
 lab1:='';
 lab2:='';
 a:=0;
 AssignFile(file1, fil1);
 reset (file1);
  for a:=0 to 128 do
    begin;
      seek(file1,a);
      read (file1 ,b);
      sign1[a]:=b;
      //c:= sign1[a];
      //e:= sign2[a];
      //HexString := Format('%8x',[b])+'\';
      HexString := IntToHex( b,2 )+' ';
      lab1:=lab1+HexString;
      if b<32 then b:=42 ;
      lab2:=lab2+chr(b)+' ';
      case a of
        7,15,23,31,39,47,55,63,71,79,87,95,103,111,119,127:
        begin
        lab1:=lab1+chr(13);
        lab2:=lab2+chr(13);
        end;
        end;
        end;
  next;
  Closefile(file1);
  label1.caption:= lab1;
  label2.caption:= lab2;
end;

procedure TForm1.BitBtn4Click(Sender: TObject);
begin
opendialog2.Execute;
fil2:=opendialog2.FileName;
groupbox2.Caption:=opendialog2.FileName;
 lab3:='';
 lab4:='';
 a:=0;
 AssignFile(file2, fil2);
 reset (file2);
  for a:=0 to 128 do
    begin;
      seek(file2,a);
      read (file2 ,e);
      sign2[a]:=e;
      //c:= sign1[a];
      //e:= sign2[a];
      //HexString := Format('%8x',[b])+'\';
      HexString2 := IntToHex( e,2 )+' ';
      lab3:=lab3+HexString2;
      if e<32 then e:=42 ;
      lab4:=lab4+chr(e)+' ';
      case a of
        7,15,23,31,39,47,55,63,71,79,87,95,103,111,119,127:
        begin
        lab3:=lab3+chr(13);
        lab4:=lab4+chr(13);
        end;
        end;
        end;
  next;
  Closefile(file2);
  label3.caption:= lab3;
  label4.caption:= lab4;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);

end;

end.
на данном этае программа может открыть 2 файла перевесть в хекс и расположить рядом столбцы со строками
Ответить с цитированием
  #2  
Старый 09.03.2009, 02:14
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

1.Ну поскольку вы пишете в Дельфи, а не в Турбо-Паскале, то я бы посоветовал воспользоваться специальным классом для работы с файлами - TFileStream. Во многом он удобнее чем устаревший AssignFile и т.д.
2.Обрабатывайте сразу потенциальные ошибки, например: а что если файл будет меньше 128 байт?
Ответить с цитированием
  #3  
Старый 09.03.2009, 03:34
Аватар для Thrasher
Thrasher Thrasher вне форума
Illuminati
 
Регистрация: 06.03.2008
Адрес: Крым, г. Симферополь
Сообщения: 348
Репутация: 8808
По умолчанию

Советую сходить для начала сюда http://formats.ru/ и там почитать про форматы файлов. Иногда недостаточно первых 64 или даже 128 байт.
__________________
Хорошо написанная программа не требует документации
ICQ 9-184-668.
Ответить с цитированием
  #4  
Старый 09.03.2009, 22:06
juri juri вне форума
Прохожий
 
Регистрация: 07.03.2009
Сообщения: 4
Репутация: 10
По умолчанию

Ни когда не писал на delfi вот решил под учиться.
Спасибо за совет.
Сигнатуры нужны для конкретной программы которая из потока даннных спутника извлекает файлы
для нее нет смысла писать сигнатуры длиннее она их не обрабатывает
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:24.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter