Solved

File Comparison

Posted on 2000-04-27
4
209 Views
Last Modified: 2012-05-04
How do I perform a binary file comparison (like the one in DOS [FC]) and direct the output to a file using delphi 5.
0
Comment
Question by:eldraco
4 Comments
 
LVL 9

Expert Comment

by:ITugay
ID: 2758432
Hi
The working sample is bellow.

-----
uses ... , ShellApi, ...

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
   ShellExecute(handle,'open','command','/c fc c:\autoexec.bat c:\autoexec.dos > c:\result.txt',nil,SW_HIDE);
end;

-----
Igor.
0
 
LVL 7

Expert Comment

by:Motaz
ID: 2761452
But there is one problem. How did you know that the compression is finished!

Motaz
0
 
LVL 1

Expert Comment

by:new_x
ID: 2763341
Listening
0
 
LVL 7

Accepted Solution

by:
God_Ares earned 100 total points
ID: 2763555
I think this is what you need...
code could be optimized..

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Memo1: TMemo;
    OpenDialog1: TOpenDialog;
    OpenDialog2: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
    fname1,fname2:string;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if opendialog1.execute then fname1:=opendialog1.filename;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if opendialog2.execute then fname2:=opendialog2.filename;
end;

procedure TForm1.Button3Click(Sender: TObject);
var s1,s2:Tfilestream;
    i,j:integer;
    a,b:byte;
begin
  s1:=tfilestream.Create(fname1,fmOpenRead);
  s2:=tfilestream.Create(fname2,fmOpenRead);

  if s1.Size > s2.size then i:=s2.size else i:=s1.size;

  For j:=1 to i-1 do
  Begin
    s1.Read(a,1);
    s2.Read(b,1);
    if a<>b then memo1.lines.add(inttohex(j,6)+'  '+inttohex(a,2)+' '+inttohex(b,2));
  End;

  if s1.Size > s2.size then memo1.Lines.add(fname1+' is lager than '+fname2);
  if s1.Size < s2.size then memo1.Lines.add(fname2+' is lager than '+fname1);

  s1.free;
  s2.free;
end;

end.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article explains how to create forms/units independent of other forms/units object names in a delphi project. Have you ever created a form for user input in a Delphi project and then had the need to have that same form in a other Delphi proj…
Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
Along with being a a promotional video for my three-day Annielytics Dashboard Seminor, this Micro Tutorial is an intro to Google Analytics API data.
In this video I am going to show you how to back up and restore Office 365 mailboxes using CodeTwo Backup for Office 365. Learn more about the tool used in this video here: http://www.codetwo.com/backup-for-office-365/ (http://www.codetwo.com/ba…

911 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now