Паскаль скрипт TfileStream type mismatch
Добавлено: 04.12.2019 14:11:53
Привет Сообществу. Первые шаги, так что не обессутьте. Использую читапаскаль Lazarus скриптовый язык, встроенный в ПО. Написал первый скрипт, но получилось оч медленное выполнение, надо убыстрять. Задача, открыть бинарный файл размером до 15гб, а затем по читает данные из железа и сравниваем с откртым файлом. В скриптовом движке есть функция работы с файлом, но вот буфер и для работы с файлом и для чтения железа - один. Приходится читать файл, копировать в свой буфер - медленно!!!
Почитал http://www.freepascal.ru/forum/viewtopic.php?f=1&t=8320&sid=e75139d60d4f6940c94a120503e07e0c.
Решил использовать в самом скрипте TFileStream для чтения в свой массив-буфер средствами самого паскаля.
В движке есть редактор с проверками на ошибки. Так вот - на строку FS.Read(MyBuffer[0], ErGrSize); - Type mismatch
Что я делаю не так?
Почитал http://www.freepascal.ru/forum/viewtopic.php?f=1&t=8320&sid=e75139d60d4f6940c94a120503e07e0c.
Решил использовать в самом скрипте TFileStream для чтения в свой массив-буфер средствами самого паскаля.
- Код: Выделить всё
const
PageSize = 512;
ErGrSize = 512*1024{PageSize *page_count;};
var
Res: Boolean; //Результат выполнения функции. Принимает значение 1 в случае успешного выполнения и 0 в случае ошибки
myFileName: String; //Имя файла, выбираемое в файловом диалоге
FS: TFileStream;
iFileSize: Int64; // Размер открываемого дампа
page_count, i, g: Integer;
MyBuffer: array OF Byte;
begin
Res := GetOpenFileName('Выбери меня!', myFileName, 'Dumps', 'Дампы (*.user)|*.user| Все файлы|*.*', 'user');
SetLength(MyBuffer, ErGrSize); //объявляем PageBuffer (PageSize*page_count)
setarraylength(PageBuffer, ErGrSize);
//setarraylength(MyBuffer, ErGrSize);
if (Res) then
begin
AddMessage('Open file %s', [myFileName]);
FS := TFileStream.Create(myFileName, fmOpenRead or fmShareDenyWrite);
try
iFileSize := FS.Size;
AddMessage('File size %d byte', [iFileSize]);
for g:= 0 to (iFileSize div ErGrSize)-1 do //filesize : 524288
begin
FS.Seek(g*ErGrSize, soFromBeginning);
FS.Read(MyBuffer[0], ErGrSize);
......
В движке есть редактор с проверками на ошибки. Так вот - на строку FS.Read(MyBuffer[0], ErGrSize); - Type mismatch
Что я делаю не так?