Главная страница
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.017 c
6-81013
Созонов Евгений
2002-02-14 10:17
2002.04.25
Получение информации (кто ? че делал ? время доступа ?) о доступе на свой комп.


1-80839
AlexP
2002-04-10 22:21
2002.04.25
Наследование форм


14-81062
FELLINI
2002-03-20 07:24
2002.04.25
Заблокировать программу


1-80937
Алена
2002-04-11 17:49
2002.04.25
Async Pro + Модем


1-80905
Sound
2002-04-15 02:08
2002.04.25
HTTP запроc. хто нить Help!