Форум: "Основная";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
ВнизОшибка при обращении к процедуре BlockRead Найти похожие ветки
← →
Tolik (2004-05-22 02:23) [0]Вот небольшая програмка, копирующая файл Test.dat в Test1.dat:
var
Buf:array of Word;
F,F1:File;
begin
AssignFile(F,"c:\Test.dat");
Reset(F,1);
AssignFile(F1,"c:\Test1.dat");
Rewrite(F1,1);
SetLength(Buf,FileSize(F));
BlockRead(F,Buf,FileSize(F); //тут возникает ошибка ElnOutError "I/O 87" ! А почему?
BlockWrite(F1,Buf,FileSize(F));
CloseFile(F);
CloseFile(F1);
end;
Если использовать статический массив Buf, то никаких ошибок не возникает, но с динамическим
какие-то проблемы. Насколько я знаю в Delphi4 нельзя использовать динамические массивы в
качестве буфера из-за недоработки процедур BlockRead/BlockWrite, но в Delphi5 и 6 эта
недоработка была исправлена. У меня установлена Delphi6. Из-за чего возникает эта ошибка?
Еще. В Delphi help BlockRead описывается так:
procedure BlockRead(var F: File; var Buf; Count: Integer [; var AmtTransferred: Integer]);
однако у меня в редакторе кода она (при подсказке синтаксиса) имеет вид:
var F: File; var Buf; Count: Integer [; var Result: Integer].
← →
Johnmen © (2004-05-22 02:30) [1]Не мучай себя
var
Buf:array of byte;
← →
Германн © (2004-05-22 03:14) [2]Имхо, насколько помню, второй параметр процедуры BlockRead должен являться указателем на первый байт той области, куда будут записаны данные.
Имхо следует писАть BlockRead(F,Buf[0],FileSize(F);
← →
Anatoly Podgoretsky © (2004-05-22 12:32) [3]Не стоит загонять столько данных в переменную у которой размер всего 4 байта. ShowMessage(IntToStr(SizeOf(buf))
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.033 c