![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
нетипизированный файл и процедура BlockRead
Дева © (2006-01-12 18:42:00)Здравствуйте, уважаемые мастера-программисты. Подскажите пожалуйста, как работать с нетипизированными файлами, а конкретнее, с процедурой 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?
Заранее благодарю за ответ
Дева (2006-01-12 19:34:00) [1]Спасибо Джо, теперь понятно
Джо (2006-01-12 19:30:00) [2]> [6] Дева © (12.01.06 19:24)
Потому, что в этом случае, переменная инициализирована нулем (а не случ. значением). А число 10 как раз и помещается в первый байт четырехбайтовой переменной.
Кефир87 (2006-01-12 19:27:00) [3]число 10 влезает в 1 байт. В i записывается только один младший байт. А еще до обнуления в i хранился мусор, а после blockread изменился только один из 4х байт.
Дева (2006-01-12 19:24:00) [4]спасибо
Но почему во втором члучае, когда я ТОЛЬКО добавила строку i:=0, все работает правильно? И в переменную i считывается число "10", а не "4371978", как сначала?
Кефир87 (2006-01-12 18:59:00) [5]Тфу. Забыл совсем 8)
Плохиш (2006-01-12 18:54:00) [6]
> Кефир87 © (12.01.06 18:47) [3]
> В нетипизированном 1 елемент = 1 байт
Слядует читать не "1 байт", а "1 блок". Величина блока задаётся при открытии файла, см. справку по Reset
Кефир87 (2006-01-12 18:47:00) [7]Integer - 4 байта, а ты указываешь в BlockWrite кол-во элементов 1. В нетипизированном 1 елемент = 1 байт, в типизированном 1 елемент = sizeof(тип) 8)
Johnmen (2006-01-12 18:45:00) [8]BlockRead + F1
Джо (2006-01-12 18:45:00) [9]Размер переменной типа Integer НЕ 1 байт, а 4.