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

Вниз

Загрузка файла в массив типа 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: Я проверил на главном модуле, а на дополнительных нет, но думаю, что там не будет ошибок!


 
Sasha9 ©   (2002-04-15 12:55) [9]




Страницы: 1 вся ветка

Текущий архив: 2002.04.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
6-81010
Hyper-X
2002-01-18 21:22
2002.04.25
помогите!!!!


1-80985
koks
2002-04-12 13:34
2002.04.25
TStringGrid... ПАМАГИТЕ!


4-81108
Vladimir Bolotin
2002-01-10 20:33
2002.04.25
прозрачность в win2k


1-80934
ppcat
2002-04-11 15:55
2002.04.25
Проблема с Quick Report


14-81044
Виктор Щербаков
2002-03-19 13:44
2002.04.25
Константные выражения