Форум: "Начинающим";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];
ВнизПомогите найти ошибку в коде Найти похожие ветки
← →
Виктор (2008-05-13 13:30) [0]Здравствуйте! Мне необходимо сравнить 2 файла 111.zzz и 222.zzz и найти номер байта с которого они различаются, написал простенькую программку, а она не работает, в чём косяк, подскажите, а то что-то я торможу :(
Вот сама прога:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i,j,k:integer;
f,f1:file;
buf,buf1:byte;
begin
assignFile(f,"c:\111.zzz");
reset(f);
assignFile(f1,"c:\222.zzz");
reset(f1);
i:=0;
seek(f,0);
seek(f1,0);
while i<=FileSize(f) do
begin
BlockRead(f,buf,1);
BlockRead(f1,buf1,1);
if buf<>buf1 then
showMessage(IntToStr(i));
inc(i);
seek(f,i);
seek(f1,i);
end;
closeFile(f);
closeFile(f1);
end;
end.
← →
Palladin © (2008-05-13 13:31) [1]http://delphimaster.net/view/11-1204046814/
← →
Сергей М. © (2008-05-13 13:33) [2]
> она не работает
Что, прямо так и заявляет - "не работаю" ?
← →
Виктор (2008-05-13 13:36) [3]Большое спасибо!!
← →
Виктор (2008-05-13 13:39) [4]
> Что, прямо так и заявляет - "не работаю" ?
Ну, да, выдаёт ошибку, хотя код вроде правильный, файлы с такими именами существуют...
← →
Palladin © (2008-05-13 13:45) [5]а он и будет выдавать, ты не указал размер считываемой единицы, а по умолчанию он, по моему, 127, потому указывая BlockRead(f,buf,1); ты читаешь не 1 байт, как тебе кажется, а 127, отсюда и кирдык... читать книжки нужно...
← →
Lumen © (2008-05-13 13:50) [6]>Виктор (13.05.08 13:30)
Мне кажется, оба Seek лишние, после BlockRead указатель там где ему и положено быть. Ну а по существу, необходимо:
reset(f, 1) и reset(f1, 1);
← →
Сергей М. © (2008-05-13 13:55) [7]
> Ну, да, выдаёт ошибку
Что, вот прямо так и говорит - "выдаю ошибку" ?
Или не царское это дело - анализировать содержание реального сообщения об ошибке ?
← →
Palladin © (2008-05-13 13:57) [8]там вообще все seekи лишние, и file лишнее, на кой хрен работать с нетипизированными файлами с целью блочного чтения целого одного байта, фигли на такси за хлебом ездить
← →
Leonid Troyanovsky © (2008-05-13 13:59) [9]
> Виктор (13.05.08 13:30)
> Вот сама прога:
function CompStream(Stream1, Stream2: TStream): Boolean;
const
bufsize = $1000;
var
buf1, buf2: array [0..bufsize-1] of Byte;
nb1, nb2 : Longint;
begin
Result := Stream1.Size = Stream2.Size;
if not Result then
Exit;
while (Stream1.Position < Stream1.Size) do
begin
nb1 := Stream1.Read(buf1, bufsize);
nb2 := Stream2.Read(buf2, bufsize);
Result := nb1 = nb2;
if not Result then
raise Exception.Create("Compare error");
Result := CompareMem(@buf1, @buf2, nb1);
if not Result then
Exit;
end;
end;
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.06 c