Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1226588778
antonn
2008-11-13 18:06
2009.01.11
нужен jpeg.pas


2-1227819867
demon
2008-11-28 00:04
2009.01.11
Как сохранить в ini-файл значение HBRUSH ?


15-1226778810
main
2008-11-15 22:53
2009.01.11
Что это может быть? Мышка как-бы временно прилипает?


4-1203014467
AlexeyShestchenko
2008-02-14 21:41
2009.01.11
порядок нахождения


1-1205323967
0x01
2008-03-12 15:12
2009.01.11
Проблема при работе с DLL





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский