![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Чтение двоичных файлов [D5, Win95/98]
Zirus © (2003-04-12 15:53:00)Здравствуйте! Имеем файл. Требуется прочитать его readblock-ами. (Какой оптимальный размер блока?) И как создать буффер на 1к(пусть будет такой буффер)?
Как быть, когда до конца файла осталось <8 байт - а блок=8 байт? Вылетает ошибка!
LEON (2003-04-14 22:29:00) [1]а в досе то нет?
Anatoly Podgoretsky (2003-04-14 12:33:00) [2]Есть маленькая разница, виндоуская работает, а твоя нет.
Вот совсем быстрая неработающая процедура
procedure CopyFu(Src,Dst: string);
begin
end;
Zirus (2003-04-14 12:27:00) [3]1) моя версия копирования работает на 10-15% быстрее аналогичной виндовой.
2) копирование - частный случай. мне надо было не для этого.
Anatoly Podgoretsky (2003-04-12 18:21:00) [4]И особоизвращенная версия СopyFileEx
Надо вхять за правило не писать, тчо что имеет ся в системе
MBo (2003-04-12 16:53:00) [5]BTW, СopyFile имеется
Zirus (2003-04-12 16:48:00) [6]Спасибо!
если кому понадобится - вот текст(копирование файла).
procedure TForm1.Button1Click(Sender: TObject);
var x: array[1..16384] of byte;
y: integer;
f,f1:file;
begin
assignfile(f,"C:\baikal\MapRastr\Map0.bmp");
assignfile(f1,"c:\6.");
rewrite(f1);
reset(f1,1);
reset(f,1);
while eof(f)=false do begin
blockread(f,x,16384,y);
//edit1.text:=edit1.text+x;
blockwrite(f1,x,y);
end;
closefile(f);
closefile(f1);
end;
MBo (2003-04-12 16:15:00) [7]>Вылетает ошибка!
Ты не используешь последний параметр процедуры - количество реально считанных записей. С ним будет все нормально.
размер блока разумно делать пропорциональным размеру кластера винчестера - 512,1024,2048, 4096 байт и т.д. Для больших винчестеров - 4096 и более предпочтительно.
var Buf:array[0..4095] of byte;