![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TFileStream
NS1989 © (2008-11-27 13:07:00)Необходимо некоторое значение записывать в файл. Правильно ли я написал вариант сохранения через 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;
Плохиш (2008-11-28 10:43:00) [1]
> NS1989 (27.11.08 13:13) [3]
>
>
> > а что смущает?
>
>
> 1-способ сохранения
Действительно, не указано к чему относится Write.
Сергей М. (2008-11-28 09:05:00) [2]
> Тын-Дын © (27.11.08 23:39) [13]
Ну хорошо, не "следует", а "рекомендуется"
Тын-Дын (2008-11-27 23:39:00) [3]
> 1. Следует использовать метод WriteBuffer - он возбудит
> исключение, если при записи приключится какой-либо катаклизм
Следует использовать, если знаешь зачем.
А так - без разницы что - Write или WriteBuffer.
Slym (2008-11-27 14:25:00) [4]Сергей М. © (27.11.08 13:33) [9]
уточнение:
нельзя таким образом сохранить "ссылочный"тип или тип в котором присутствуют поля ссылочного типа...
под ссылочные типы подподают: динамические массивы а также их производные - строки с переменной длинной, указатели (PChar, PInteger) и производные (объекты)...
короче в общем случае все что SizeOf(Value)=SizeOf(Integer), но при этом вмещающее в себя более байт так сохранить нельзя
Сергей М. (2008-11-27 13:35:00) [5]
> Все данные по адресу Value размером с Value запишутся в
> поток
"Все" вовсе не обязаны.
Потому Write как раз и объявлен как функциональныйметод
Сергей М. (2008-11-27 13:33:00) [6]
> при какой ситуации возникнет ошибка
При указании в кач-ве Value идентификатора переменной, имеющий любой из типов данных с управляемым временем жизни - (Ansi|Wide)String, [Ole]Variant, динамический массив ..
Поросенок Винни-Пух (2008-11-27 13:33:00) [7]try
Write(Value, SizeOf(Value));
finally
Free;
end;
Это и есть правильно.
Все данные по адресу Value размером с Value запишутся в поток.
NS1989 (2008-11-27 13:19:00) [8]
> {RASkov} © (27.11.08 13:18) [6]
> > [3] NS1989 (27.11.08 13:13)Первый способ именно тут
> и именно так - написан не верно
Подскажите как должно быть правильно
{RASkov} (2008-11-27 13:18:00) [9]> [3] NS1989 (27.11.08 13:13)
Первый способ именно тут и именно так - написан не верно.
NS1989 (2008-11-27 13:18:00) [10]
> Правильность в обоих вариантах зависит от типа Value
Хотелось бы услышать более подробно, при какой ситуации возникнет ошибка
Palladin (2008-11-27 13:16:00) [11]метод Write одинаковый, что в TFileStream, что в TMemoryStream, потому что это метод их общего наследника TStream. повторяю, что смущает?
Palladin (2008-11-27 13:16:00) [12]тьфу, родителя, а не наследника... )
NS1989 (2008-11-27 13:13:00) [13]
> а что смущает?
1-способ сохранения, так как впервые приходится использовать TFileStream
Сергей М. (2008-11-27 13:12:00) [14]1. Следует использовать метод WriteBuffer - он возбудит исключение, если при записи приключится какой-либо катаклизм
2. Правильность в обоих вариантах зависит от типа Value
Palladin (2008-11-27 13:10:00) [15]а что смущает?