Паскаль скрипт TfileStream type mismatch
 Добавлено: 04.12.2019 14:11:53
Добавлено: 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
Что я делаю не так?
 ), но вот логическая ошибка у Вас там видна даже без мелкоскопа.
 ), но вот логическая ошибка у Вас там видна даже без мелкоскопа.   Вот смотрите, Вы в одну ячейку своего массива MyBuffer (MyBuffer[0]), которая у Вас задана размером в 1 байт, пытаетесь засунуть данные размером 512*1024. Ну вот сами представьте, что Вам в рот пытаются засунуть очень вкусный бутерброд размером с авианесущий крейсер "Адмирал Кузнецов". Каковы, после этого, будут Ваши впечатления?
  Вот смотрите, Вы в одну ячейку своего массива MyBuffer (MyBuffer[0]), которая у Вас задана размером в 1 байт, пытаетесь засунуть данные размером 512*1024. Ну вот сами представьте, что Вам в рот пытаются засунуть очень вкусный бутерброд размером с авианесущий крейсер "Адмирал Кузнецов". Каковы, после этого, будут Ваши впечатления?  
