Разбиение и сборка файла
Не так сложно, вот как это может выглядеть:
var
inf: file;
outf: file;
size: longint;
outsize: longint;
amt: word;
amtRead: word;
begin
assignfile(inf, 'входной файл');
reset(inf, 1);
size := fileSize(inf);
repeat
showMessage('Вставьте дискету в дисковод "A"')
{ или "B", а лучше позвольте их определять }
assignFile(outf, 'A: выходной файл');
rewrite(outf, 1);
outsize := diskFree(1); { или 2, если это дисковод "B" }
while (outsize > 0) and (size > 0) do
begin
amt := sizeof(buf);
if amt > outsize then
amt := outsize;
blockRead(inf, buf, amt, amtRead);
blockWrite(outf, buf, amtRead);
dec(outSize, amtRead);
dec(size, amtRead);
end;
closeFile(outf);
until size <= 0;
closeFile(inf);
end;
|
Писалось все "от руки", поэтому синтаксис может быть с ошибками. Правильным
было бы добавление кода, который позволит пользователю определить используемый
дисковод ("A" или "B"), задание именной схемы для восстановления информации,
если один из дисков испортится и пр.
Сборка происходит аналогично: открываем на диске выходной файл, просим
пользователя вставить дискетту, blockRead/blockWrite с дискеты на жесткий диск,
просим пользователя вставить другую дискету, пока куски файла не считаются
полностью.
|