Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.009 c
3-80757
VAleksey
2002-04-03 10:16
2002.04.25
Ошибка при удалении


1-80960
EsKor
2002-04-12 09:00
2002.04.25
Блокируется вывод в Edit в цикле


1-80843
Rammst
2002-04-13 07:49
2002.04.25
PlaySound


14-81042
vopros
2002-03-19 16:43
2002.04.25
Предлагаю злых нечеловеков исключать отсюда


14-81046
lipskiy
2002-03-19 21:45
2002.04.25
По поводу XP и убитого винта - шутка дубль два или что это?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский