Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.08;
Скачать: CL | DM;

Вниз

Помогите найти ошибку в коде   Найти похожие ветки 

 
Виктор   (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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
3-1199004743
Александр Иванов
2007-12-30 11:52
2008.06.08
Втавка записи при ограничении уникланьости


15-1209062198
Palladin
2008-04-24 22:36
2008.06.08
Кибепрнетика


2-1211128627
pirks
2008-05-18 20:37
2008.06.08
TActionManager динамическое изменение свойст.


2-1209999304
TStas
2008-05-05 18:55
2008.06.08
Что такое class of ?


15-1209060669
wl
2008-04-24 22:11
2008.06.08
программа для переключения раскладки по Ctrl+Shift "И" Alt+Shift