Форум: "Основная";
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];
ВнизЗагрузка файла в массив типа byte. Найти похожие ветки
← →
VEG (2002-04-14 19:25) [0]Задача: Требуется загрузить часть файла, начиная с байта PIF (
PIF:Integer;
) и заканчивая
последним байтом, в динамический массивFileOut:array of byte;
, а потом весь этот массив,
после обработки, сохранить в другой файл. Я пробовал следующее, но этот код при выполнении
приводил в исключительной ситуации:
Procedure Load_MOD_File;
var
FI, FO: file{Пробовал тип file of Byte. Тогда проект вообще не компилируется};
FileOut:array of byte;
InfT:Byte;
PIF:Integer;
begin
AssignFile(FI, "in.dat");
AssignFile(FO, "out.dat");
Reset(FI);//Здесь я пробовал: Reset(FI,1{и др. числа});
PIF:=0;
While InfT<>19 do
begin
Seek(FI, PIF);
BlockRead(FI, InfT, 1);
PIF:=PIF+1;
end;
Rewrite(FO,FileSize(FI)-PIF);//Здесь я пробовал: Rewrite(FO); Rewrite(FO,1{и др. числа});
SetLength(FileOut,FileSize(FI)-PIF);
Seek(FI, PIF);
BlockRead(FI, FileOut, FileSize(FI)-PIF);//Здесь исключительная ситуация при выполнении
I/O error 998
Seek(FO, 0);
BlockWrite(FO, FileOut, FileSize(FI)-PIF-1);
CloseFile(FI);
CloseFile(FO);
end;
Это я ошибся или компилятор (Delphi 6) глючит? Как правильно выполнить данную задачу?
Пробовал упростить задачу:
procedure TForm1.Button1Click(Sender: TObject);
var
buf:array of byte;
fi,fo: file;
begin
assignfile(fi,"in.dat"); Reset(fI,1);
assignfile(fo,"out.dat"); Reset(fo,1);
SetLength(buf,filesize(FI));
BlockRead(FI,buf,filesize(fi));
BlockWrite(FO,buf,filesize(fi));
buf:=nil;
end;
В итоге получается та же исключительная ситуация при выполнении.
← →
VEG (2002-04-14 19:43) [1]Понимаю, что код кривой, но все же?
← →
Sniffer (2002-04-14 20:03) [2]Кривой, ет точно
← →
VEG (2002-04-14 20:12) [3]Вообще легче всего сказать кривой, но я только начал осваивать работу с файлом побайтно.
← →
KaPaT (2002-04-14 20:29) [4]А может использовать не массив а поток MemStream?
а для работы с файлом потое FileStream?
← →
VEG (2002-04-14 22:00) [5]Мною замечено, что если я использую не динамический массив, то ошибки нет! Почему так?
← →
Sasha9 (2002-04-14 22:10) [6]недавно столкнулся с той же проблемой и очень долго с ней гемороился, я конечно не уверен, но имхо динамический массив buf имеет тип pointer, и поэтому он просто присваевает ему(указателю) новую величину, я решил эту проблему указывая не buf а buf[0]
ответь, помогло или нет........
← →
VEG (2002-04-15 00:43) [7]Спасибо, сейчас проверю.
← →
VEG (2002-04-15 00:51) [8]>Sasha9
Рррааабооотаааееет!!! Спасибо тебе огромное!!!
PS: Я проверил на главном модуле, а на дополнительных нет, но думаю, что там не будет ошибок!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.04.25;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c