Главная страница
    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.006 c
1-80976
Shadow77
2002-04-09 18:43
2002.04.25
Приложение не должно быть видно в панели задач.


3-80742
diMAN
2002-03-29 18:45
2002.04.25
Прогресс-бар при выполнении длительных SQL-запросов


3-80836
Alexsys
2002-04-05 23:38
2002.04.25
GRID + несколько колонок в внем же...


3-80809
Mikeee
2002-04-05 08:50
2002.04.25
Как вставить в строку SQL-запроса одинарные кавычки


1-80954
Explorer
2002-04-11 12:14
2002.04.25
Дайте адресок сайта!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский