unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, FileCtrl;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Edit2: TEdit;
ProgressBar1: TProgressBar;
Memo1: TMemo;
Button3: TButton;
DirectoryListBox1: TDirectoryListBox;
DirectoryListBox2: TDirectoryListBox;
Label1: TLabel;
DriveComboBox1: TDriveComboBox;
DriveComboBox2: TDriveComboBox;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure DirectoryListBox1Change(Sender: TObject);
procedure DirectoryListBox2Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
SourFiles : TStrings;
DestFiles : TStrings;
// Function cmp(SourFiles:String,DestFiles:String):Bool;
implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var Found:integer;
//Attr :integer;
// SearchRec: TSearchRec;
FindResult : WIN32_FIND_DATA;
begin
Found := FindFirstFile('G:\*.DC?',FindResult);
//while Found = 0 do
//begin
if Found > 0 then
begin
showmessage(FindResult.cFileName); while FindNextFile(Found, FindResult) do
//begin
//if FindResult.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY <> 0 then
//showmessage('<DIR> ' + FindResult.cFileName)
// else
showmessage(FindResult.cFileName);
// end;
//FindClose(Found);
end;
// end;
end;procedure SearchFiles(Path: String; Files: TStrings);
var
Found:integer;
Ext: String;
SearchRec: TSearchRec;
begin
If Path[Length(Path)] <> '\' then
Path := Path + '\';
Found := FindFirst(Path+'*.*', faAnyFile, SearchRec);
while Found = 0 do
begin
If (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
If (SearchRec.Attr = faDirectory) then
SearchFiles(Path+SearchRec.Name+'\', files)
else begin
ext := UpperCase(ExtractFileExt(SearchRec.Name));
If Copy(ext,2,2) = 'DC' then
Files.Add(Path+SearchRec.Name);
end;
Found := FindNext(SearchRec);
end;
FindClose(SearchRec);
end;procedure TForm1.Button2Click(Sender: TObject);
var
n,i,j : Integer;
s : String;
myStream1:TMemoryStream;
myStream2:TMemoryStream;
begin
SourFiles := TStringList.Create;
DestFiles := TStringList.Create;
myStream1:=TMemoryStream.Create;
myStream2:=TMemoryStream.Create;
SearchFiles(Edit1.Text, SourFiles);
SearchFiles(Edit2.Text, DestFiles);
If DestFiles.Count <> SourFiles.Count then
begin ShowMessage(''); exit; end;
ProgressBar1.Max := SourFiles.Count;
for i := 0 to SourFiles.Count-1 do
begin
ProgressBar1.StepIt;
s := ExtractFilename(SourFiles[i]);
//s[Length(s)] := '_';
n := -1; for j := 0 to DestFiles.Count-1 do
if s = ExtractFilename(DestFiles[j]) then
begin
n := j; break
end; If n >= 0 then
begin
Memo1.Lines.Add(SourFiles[i]);
self.Caption:=inttostr(Memo1.Lines.Count);
Memo1.Lines.Add(destFiles[j]);
Sleep(50);
{if Not Cmp(SourFiles[i], DestFiles[n]) then
begin
//ShowMessage('Compressed file error');
exit
end;}
// SourFiles.LoadFromFile(edit1.Text);
myStream1.LoadFromFile();
//SourFiles.SaveToStream(myStream1);
//showmessage(inttostr(myStream1.Size));
//DestFiles.LoadFromFile(edit2.Text);
//DestFiles.SaveToStream(myStream2);
EQ := True;
for x:= 0 to Count-1 do
if p1[x]<>p2[x] then
begin
EQ := False;
Break;
end; If EQ then Self.Caption:='验证成功'+inttostr(x)//??
else Self.Caption:='验证错误'+inttostr(x);//???? end
else ShowMessage('Not Find Dest Compressed file');
end;
SourFiles.Free;
DestFiles.Free;
end;procedure TForm1.DirectoryListBox1Change(Sender: TObject);
begin
edit1.Text:=DirectoryListBox1.Directory;
end;Procedure TForm1.DirectoryListBox2Change(Sender: TObject);
begin
edit2.Text:=DirectoryListBox2.Directory;
end;
end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, FileCtrl;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Edit2: TEdit;
ProgressBar1: TProgressBar;
Memo1: TMemo;
Button3: TButton;
DirectoryListBox1: TDirectoryListBox;
DirectoryListBox2: TDirectoryListBox;
Label1: TLabel;
DriveComboBox1: TDriveComboBox;
DriveComboBox2: TDriveComboBox;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure DirectoryListBox1Change(Sender: TObject);
procedure DirectoryListBox2Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
SourFiles : TStrings;
DestFiles : TStrings;
// Function cmp(SourFiles:String,DestFiles:String):Bool;
implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var Found:integer;
//Attr :integer;
// SearchRec: TSearchRec;
FindResult : WIN32_FIND_DATA;
begin
Found := FindFirstFile('G:\*.DC?',FindResult);
//while Found = 0 do
//begin
if Found > 0 then
begin
showmessage(FindResult.cFileName); while FindNextFile(Found, FindResult) do
//begin
//if FindResult.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY <> 0 then
//showmessage('<DIR> ' + FindResult.cFileName)
// else
showmessage(FindResult.cFileName);
// end;
//FindClose(Found);
end;
// end;
end;procedure SearchFiles(Path: String; Files: TStrings);
var
Found:integer;
Ext: String;
SearchRec: TSearchRec;
begin
If Path[Length(Path)] <> '\' then
Path := Path + '\';
Found := FindFirst(Path+'*.*', faAnyFile, SearchRec);
while Found = 0 do
begin
If (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
If (SearchRec.Attr = faDirectory) then
SearchFiles(Path+SearchRec.Name+'\', files)
else begin
ext := UpperCase(ExtractFileExt(SearchRec.Name));
If Copy(ext,2,2) = 'DC' then
Files.Add(Path+SearchRec.Name);
end;
Found := FindNext(SearchRec);
end;
FindClose(SearchRec);
end;procedure TForm1.Button2Click(Sender: TObject);
var
n,i,j : Integer;
s : String;
myStream1:TMemoryStream;
myStream2:TMemoryStream;
begin
SourFiles := TStringList.Create;
DestFiles := TStringList.Create;
myStream1:=TMemoryStream.Create;
myStream2:=TMemoryStream.Create;
SearchFiles(Edit1.Text, SourFiles);
SearchFiles(Edit2.Text, DestFiles);
If DestFiles.Count <> SourFiles.Count then
begin ShowMessage(''); exit; end;
ProgressBar1.Max := SourFiles.Count;
for i := 0 to SourFiles.Count-1 do
begin
ProgressBar1.StepIt;
s := ExtractFilename(SourFiles[i]);
//s[Length(s)] := '_';
n := -1; for j := 0 to DestFiles.Count-1 do
if s = ExtractFilename(DestFiles[j]) then
begin
n := j; break
end; If n >= 0 then
begin
Memo1.Lines.Add(SourFiles[i]);
self.Caption:=inttostr(Memo1.Lines.Count);
Memo1.Lines.Add(destFiles[j]);
Sleep(50);
{if Not Cmp(SourFiles[i], DestFiles[n]) then
begin
//ShowMessage('Compressed file error');
exit
end;}
// SourFiles.LoadFromFile(edit1.Text);
myStream1.LoadFromFile();
//SourFiles.SaveToStream(myStream1);
//showmessage(inttostr(myStream1.Size));
//DestFiles.LoadFromFile(edit2.Text);
//DestFiles.SaveToStream(myStream2);
EQ := True;
for x:= 0 to Count-1 do
if p1[x]<>p2[x] then
begin
EQ := False;
Break;
end; If EQ then Self.Caption:='验证成功'+inttostr(x)//??
else Self.Caption:='验证错误'+inttostr(x);//???? end
else ShowMessage('Not Find Dest Compressed file');
end;
SourFiles.Free;
DestFiles.Free;
end;procedure TForm1.DirectoryListBox1Change(Sender: TObject);
begin
edit1.Text:=DirectoryListBox1.Directory;
end;Procedure TForm1.DirectoryListBox2Change(Sender: TObject);
begin
edit2.Text:=DirectoryListBox2.Directory;
end;
end.
可以先对两个文件生成MD5或CRC校验码
然后比较校验码是否一致
如果两个文件比较大,而且只有最后一个字节不一样,
逐个比较会很慢