![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Вот пытаюсь на писать программу которая бы сравнивала 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
|
||||
|
||||
|
1.Ну поскольку вы пишете в Дельфи, а не в Турбо-Паскале, то я бы посоветовал воспользоваться специальным классом для работы с файлами - TFileStream. Во многом он удобнее чем устаревший AssignFile и т.д.
2.Обрабатывайте сразу потенциальные ошибки, например: а что если файл будет меньше 128 байт? |
|
#3
|
||||
|
||||
|
Советую сходить для начала сюда http://formats.ru/ и там почитать про форматы файлов. Иногда недостаточно первых 64 или даже 128 байт.
|
|
#4
|
|||
|
|||
|
Ни когда не писал на delfi вот решил под учиться.
Спасибо за совет. Сигнатуры нужны для конкретной программы которая из потока даннных спутника извлекает файлы для нее нет смысла писать сигнатуры длиннее она их не обрабатывает |