Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.29;
Скачать: CL | DM;

Вниз

нетипизированный файл и процедура BlockRead   Найти похожие ветки 

 
Дева ©   (2006-01-12 18:42) [0]

Здравствуйте, уважаемые мастера-программисты. Подскажите пожалуйста, как работать с нетипизированными файлами, а конкретнее, с процедурой BlockRead. Есть такой параметр (Buf), который представляет собой буфферную переменную, в которую считывается информация из файла. Как получить доступ к этой информации?
Я с помощью процедуры BlockWrite записала в файл число 10. Далее пытаюсь прочитать это из файла:

var
i: Integer;
F: file;

begin
AssignFile(F, "1.pre");
Reset(F, 1);
BlockRead(F, i, 1);
CloseFile(F);
ShowMessage(IntToStr(i));//делаю просто для того, чтобы увидеть то, что лежит в переменной
end;

В переменной i - 4371978

если делать так:

var
i: Integer;
F: file;

begin
i:=0;//даже если в эту переменную положить любое число
AssignFile(F, "1.pre");
Reset(F, 1);
BlockRead(F, i, 1);
CloseFile(F);
ShowMessage(IntToStr(i));
end;


то в i будет лежать "10". Почему? Как "внутренне" выглядит работа процедуры BlockRead?
Заранее благодарю за ответ


 
Johnmen ©   (2006-01-12 18:45) [1]

BlockRead + F1


 
Джо ©   (2006-01-12 18:45) [2]

Размер переменной типа Integer НЕ 1 байт, а 4.


 
Кефир87 ©   (2006-01-12 18:47) [3]

Integer - 4 байта, а ты указываешь в BlockWrite кол-во элементов 1. В нетипизированном 1 елемент = 1 байт, в типизированном 1 елемент = sizeof(тип) 8)


 
Плохиш ©   (2006-01-12 18:54) [4]


> Кефир87 ©   (12.01.06 18:47) [3]
> В нетипизированном 1 елемент = 1 байт

Слядует читать не "1 байт", а "1 блок". Величина блока задаётся при открытии файла, см. справку по Reset


 
Кефир87 ©   (2006-01-12 18:59) [5]

Тфу. Забыл совсем 8)


 
Дева ©   (2006-01-12 19:24) [6]

спасибо
Но почему во втором члучае, когда я ТОЛЬКО добавила строку i:=0, все работает правильно? И в переменную i считывается число "10", а не "4371978", как сначала?


 
Кефир87 ©   (2006-01-12 19:27) [7]

число 10 влезает в 1 байт. В i записывается только один младший байт. А еще до обнуления в i хранился мусор, а после blockread изменился только один из 4х байт.


 
Джо ©   (2006-01-12 19:30) [8]

> [6] Дева ©   (12.01.06 19:24)

Потому, что в этом случае, переменная инициализирована нулем (а не случ. значением). А число 10 как раз и помещается в первый байт четырехбайтовой переменной.


 
Дева ©   (2006-01-12 19:34) [9]

Спасибо Джо, теперь понятно



Страницы: 1 вся ветка

Текущий архив: 2006.01.29;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.052 c
3-1133341391
s77
2005-11-30 12:03
2006.01.29
SQL запрос к Access через ADO дату в строку


6-1124085302
iskatel
2005-08-15 09:55
2006.01.29
Подключение удаленного доступа к сети / отключение


3-1133388279
P.V.
2005-12-01 01:04
2006.01.29
транзакции


6-1129584117
Lord_of_Darkness
2005-10-18 01:21
2006.01.29
Рдновременный прием TServerSocket ом файлов от нескольких клиенто


15-1136893611
Хинт
2006-01-10 14:46
2006.01.29
Справочник по схемотехнике