Форум: "Начинающим";
Текущий архив: 2009.01.11;
Скачать: [xml.tar.bz2];
ВнизTFileStream Найти похожие ветки
← →
NS1989 (2008-11-27 13:07) [0]Необходимо некоторое значение записывать в файл. Правильно ли я написал вариант сохранения через TFileStream:
F := TFileStream.Create(Name, fmCreate);
try
Write(Value, SizeOf(Value));
finally
Free;
end;
//2:
M := TMemoryStream.Create;
with M do
try
Write(Value, SizeOf(Value));
SaveToFile(Name);
finally
Free;
end;
← →
Palladin © (2008-11-27 13:10) [1]а что смущает?
← →
Сергей М. © (2008-11-27 13:12) [2]1. Следует использовать метод WriteBuffer - он возбудит исключение, если при записи приключится какой-либо катаклизм
2. Правильность в обоих вариантах зависит от типа Value
← →
NS1989 (2008-11-27 13:13) [3]
> а что смущает?
1-способ сохранения, так как впервые приходится использовать TFileStream
← →
Palladin © (2008-11-27 13:16) [4]метод Write одинаковый, что в TFileStream, что в TMemoryStream, потому что это метод их общего наследника TStream. повторяю, что смущает?
← →
Palladin © (2008-11-27 13:16) [5]тьфу, родителя, а не наследника... )
← →
{RASkov} © (2008-11-27 13:18) [6]> [3] NS1989 (27.11.08 13:13)
Первый способ именно тут и именно так - написан не верно.
← →
NS1989 (2008-11-27 13:18) [7]
> Правильность в обоих вариантах зависит от типа Value
Хотелось бы услышать более подробно, при какой ситуации возникнет ошибка
← →
NS1989 (2008-11-27 13:19) [8]
> {RASkov} © (27.11.08 13:18) [6]
> > [3] NS1989 (27.11.08 13:13)Первый способ именно тут
> и именно так - написан не верно
Подскажите как должно быть правильно
← →
Сергей М. © (2008-11-27 13:33) [9]
> при какой ситуации возникнет ошибка
При указании в кач-ве Value идентификатора переменной, имеющий любой из типов данных с управляемым временем жизни - (Ansi|Wide)String, [Ole]Variant, динамический массив ..
← →
Поросенок Винни-Пух © (2008-11-27 13:33) [10]try
Write(Value, SizeOf(Value));
finally
Free;
end;
Это и есть правильно.
Все данные по адресу Value размером с Value запишутся в поток.
← →
Сергей М. © (2008-11-27 13:35) [11]
> Все данные по адресу Value размером с Value запишутся в
> поток
"Все" вовсе не обязаны.
Потому Write как раз и объявлен как функциональный метод
← →
Slym © (2008-11-27 14:25) [12]Сергей М. © (27.11.08 13:33) [9]
уточнение:
нельзя таким образом сохранить "ссылочный" тип или тип в котором присутствуют поля ссылочного типа...
под ссылочные типы подподают: динамические массивы а также их производные - строки с переменной длинной, указатели (PChar, PInteger) и производные (объекты)...
короче в общем случае все что SizeOf(Value)=SizeOf(Integer), но при этом вмещающее в себя более байт так сохранить нельзя
← →
Тын-Дын © (2008-11-27 23:39) [13]
> 1. Следует использовать метод WriteBuffer - он возбудит
> исключение, если при записи приключится какой-либо катаклизм
Следует использовать, если знаешь зачем.
А так - без разницы что - Write или WriteBuffer.
← →
Сергей М. © (2008-11-28 09:05) [14]
> Тын-Дын © (27.11.08 23:39) [13]
Ну хорошо, не "следует", а "рекомендуется"
← →
Плохиш © (2008-11-28 10:43) [15]
> NS1989 (27.11.08 13:13) [3]
>
>
> > а что смущает?
>
>
> 1-способ сохранения
Действительно, не указано к чему относится Write.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.01.11;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c