0 / 0 / 0
Регистрация: 09.07.2010
Сообщений: 55
|
|
1 | |
TFileStream и сохранение разных данных в одном файле.29.10.2010, 13:03. Показов 3614. Ответов 4
Метки нет (Все метки)
Здравствуйте.
Задавал вопрос как сохранить разные данные в одном файле. Казалось разобрался, но вот проблема с помощью TFileStream можно сохранить всё в одном файле, только как из этого файла после сохранения можно загрузить данные, так чтобы то, что было записано из одного (например TreeViev1) загрузилось именно в него и нечего лишнего. А соответственно то что было в другом (например TreeViev2) загрузилось именно в него и тоже ничего лишнего и так далее. Я так понимаю наверное нужно сохранить эти данные определённым образом, чтобы можно потом было разобраться какие сохранённые данные относятся к какому объекту. Или может существует другой способ?
0
|
29.10.2010, 13:03 | |
Ответы с готовыми решениями:
4
Сохранение данных в разных ADOTable Сохранение вводимых данных в файле Сохранение данных в текстовом файле TfileStream чтение данных |
1 / 1 / 1
Регистрация: 26.08.2010
Сообщений: 133
|
|
30.10.2010, 23:30 | 2 |
Надо сохранять/считывать размер. Вот пример:
Код
procedure TForm1.Save(Tree: TTreeView; Stream: TStream); var s: TStream; sz: integer; begin s := TMemoryStream.Create; try Tree.SaveToStream(s); sz := s.Size; Stream.Write(sz, SizeOf(sz)); s.Position := 0; Stream.CopyFrom(s, sz); finally s.Free; end; end; procedure TForm1.Load(Tree: TTreeView; Stream: TStream); var s: TStream; sz: integer; begin s := TMemoryStream.Create; try Stream.Read(sz, sizeof(sz)); s.CopyFrom(Stream, sz); s.Position := 0; Tree.LoadFromStream(s); finally s.Free; end; end; Код
procedure TForm1.Button1Click(Sender: TObject); var s: TStream; begin s := TFileStream.Create('test.bin', fmCreate); Save(TreeView1, s); Save(TreeView2, s); s.Free; end; procedure TForm1.Button2Click(Sender: TObject); var s: TStream; begin s := TFileStream.Create('test.bin', fmOpenRead); Load(TreeView1, s); Load(TreeView2, s); s.Free; end;
0
|
0 / 0 / 0
Регистрация: 09.07.2010
Сообщений: 55
|
|
31.10.2010, 10:21 [ТС] | 3 |
Да действительно такой способ работает! A вот как быть если в такой цепочки при сохранении данных, вдруг в одном компоненте (промежуточном) не будет данных вообще? Ведь тогда при считывании нарушится цепочка данных, и дальнейшее считывание будет не возможно. Как предусмотреть такой вариант? И как такие данные считать адресно, то есть если сохранялось например пять данных из компонентов, а мне нужно загрузить только третий?
0
|
1 / 1 / 1
Регистрация: 26.08.2010
Сообщений: 133
|
|
31.10.2010, 19:08 | 4 |
>A вот как быть если в такой цепочки при сохранении данных, вдруг в
>одном компоненте (промежуточном) не будет данных вообще? Ведь тогда >при считывании нарушится цепочка данных, и дальнейшее считывание >будет не возможно. Как предусмотреть такой вариант? А проверить слабо? Ты же перед каждым компонентом записываешь его размер, если данных нет, то какой будет записан размер? На столько, соответственно, и передвинется position потока. >И как такие данные считать адресно, то есть если сохранялось >например пять данных из компонентов, а мне нужно загрузить только >третий? 1.Читаешь размер, перемещаешься (Seek). 2.Читаешь размер, перемещаешься (Seek). 3.Читаешь размер, считываешь в компонент (Read).
0
|
0 / 0 / 0
Регистрация: 09.07.2010
Сообщений: 55
|
|
31.10.2010, 22:55 [ТС] | 5 |
Да блин, не там поставил if sz >0 then begin, а её надо было ставить перед s.CopyFrom(Stream, sz);
И не мог бы ты написать пример по поводу перемещения с помощью Seek и чтения Read? Хотя бы в общих чертах. И, не сочти за наглость, не знаешь почему при загрузке в TreeViev иногда возникает исключение- ...exe raised exception class ETreeViewError with message 'Invalid level for item…? При сохранении не Invalid level, а при загрузке исключение. Может всё дело в сохранении? И как сохраняет Delphi в форму *.dfm типа: Items.Data = { 090000001D0000000…. может и мне можно так сохранить?
0
|
31.10.2010, 22:55 | |
31.10.2010, 22:55 | |
Помогаю со студенческими работами здесь
5
В программе предусмотреть сохранение вводимых данных в файле и возможность чтения из ранее сохраненного файла Ввод и сохранение данных в текстовом файле Ввод и сохранение данных в текстовом файле Сохранение нескольких рисунков в одном файле Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |