|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
побайтное чтение файла
Здравтсвуйте, подскажите как прочитать файл в массив из элементов по 8 байт? необходима дальнейшая работа с битами файла
|
#2
|
||||
|
||||
Цитата:
Код:
procedure TForm1.Button1Click(Sender: TObject); var massiv: array[1..8] of Byte; fs: TFileStream; begin // Открываем файл на чтение без блокировок: fs := TFileStream.Create('Имя файла', fmOpenRead or fmShareDenyNone); try fs.Position := 0; // Устанавливаем позицию с которой нужно прочитать файл fs.ReadBuffer(massiv, 8); // Читаем из указанной позиции файла 8 байт в массив ... // Что-то делаем с прочитанными данными finally fs.Free; end; end; |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Alegun (19.06.2018)
|
#3
|
||||
|
||||
Воу-воу, poli-smen, так же надо (вдруг он динамический массив воткнет, да и просто принять за правило)
Код:
fs.ReadBuffer(massiv[1], length(massiv)); — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#4
|
||||
|
||||
Цитата:
А вообще у меня правило другое: Для переменных неуказательных типов (которыми являются и статические массивы) я передаю сами эти переменные: Код:
fs.ReadBuffer(massiv, 8); Код:
fs.ReadBuffer(Pointer(massiv)^, 8); |
#5
|
|||
|
|||
А вот так будет работать всегда
Код:
fs.ReadBuffer(massiv[low(massiv)], length(massiv)); |
#6
|
||||
|
||||
Цитата:
p.s. И кроме того функции Low и High не применимы для строк в старых версиях Delphi. |
#7
|
|||
|
|||
Цитата:
что-то я в вашем споре запутался. первый предложенный будет читать? и далее после обработки массива нужно в этот же массив считать следующие 8 байт, потом следующие и так лдо конца. а в коде я этого не вижу((( |
#8
|
||||
|
||||
Цитата:
Код:
... var f : file of byte; buf: array[1..8] of byte; i,b: integer; begin AssignFile(f,'File Name'); try Reset(f); Seek(f,1); repeat BlockRead(f, buf, SizeOf(buf), i); for b:= 1 to i do begin // вот здесь делайте со считанными байтами что хотите buf[b]:= ... end; until (i = 0); finally CloseFile(f); end; end; ... Я не понял Вашего вопроса, но всё же Вам на него отвечу! |