Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];

Вниз

нетипизированный файл и процедура 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.535 c
2-1136826110
Pazitron_Brain
2006-01-09 20:01
2006.01.29
Рандомизатор


2-1137018122
Farpik
2006-01-12 01:22
2006.01.29
CreateProcess


2-1137154318
ASMSoft
2006-01-13 15:11
2006.01.29
РАДАР


2-1137003582
mozgan
2006-01-11 21:19
2006.01.29
Аттрибуты файла


15-1136458296
Piter
2006-01-05 13:51
2006.01.29
Как же неудобно отлаживать многопоточное приложение в Дельфи :(





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский