Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TIniStream реальность?


Страницы:   1 2 3

brother ©   (2011-11-18 10:01:00) 

Работаю с файлами: структура INI, необходимо чтениеданных, файл нужно держать в памяти (TMemoryStream)
Есть ли подобный компонент TIniStream? или придется реализовывать самому?


Anatoly Podgoretsky   (2011-11-18 10:55:00) [41]

> brother  (18.11.2011 10:46:18)  [18]

ИНИ файл системой полностью считывается в память, потом работа ведется с
памятью.
Поэтому не понятна задача писать велосипед.


brother   (2011-11-18 10:46:00) [42]

эх, до чего ж ты упертый, объясню еще раз:
Есть TMemoryStream содержащий в себе структуру Ini, фактически, файла со структурой TIniFile нет.
Задумался, как лучше работать со структурой ini в TMemoryStream...
Пришел к выводу в посте [9] с небольшим допилом, те велосипед будет (LoadFromStream), но минимальный.
Профит!


Медвежонок Пятачок   (2011-11-18 10:40:00) [43]

Мужик, ты немного порефлексируй над своими желаниями.
Почему может возникнуть желание считать файл в память один раз?
Потому что не хочется открывать этот файл несколько раз.
А почему оно возникло у тебя?
Потому что ты думаешь, что Tini, каждый раз, когда ты читаешь значение из ини , открывает файл заново и затем закрывает его. И так каждый раз.


brother   (2011-11-18 10:38:00) [44]

изобретение своего велосипеда, использовать стандартные средства по максимуму, но видимо без написания своего
LoadFromStream не обойтись.


DVM   (2011-11-18 10:36:00) [45]


> brother ©   (18.11.11 10:35) [14]


> вот от этого как раз и хотел максимально избавиться!

От чего избавиться?


brother   (2011-11-18 10:35:00) [46]

зы.

> и решил что у тебябудет лучше

вот от этого как раз и хотел максимально избавиться!


brother   (2011-11-18 10:33:00) [47]

теперь да, вопрос исчерпан. всем спасибо!


Медвежонок Пятачок   (2011-11-18 10:30:00) [48]

идея: держать структуру TIniFile в памяти и читать нужные секции и значения по необходимости...

Ты вообще интересовался вопросом, каким образом винда работает с ини файлами?
Перед тем как придумывать свой улучшайзер?
Или просто поковырял в носу и решил что у тебя будет лучше?


brother   (2011-11-18 10:28:00) [49]

> в чем была мега-идея-то?

[3]


Медвежонок Пятачок   (2011-11-18 10:23:00) [50]

имхо да, тока с их обертками О_о или это не так?

Обычный TIni:
Создал экземпляр, сохранил переменную юзаешь.

Необычный ини:
Создал экземпляр, сохранил в переменную, открыл физическийц ини, прочитал в какой-то там стрим, закачал в необычный ини, юзаешь. + Потерял нотификации системы об изменениях в физическом ини.

Вопрос:
в чем была мега-идея-то?
просто заморочиться?


brother   (2011-11-18 10:22:00) [51]

да придется чуть править TMemIniFile

procedure TForm1.Button1Click(Sender: TObject);
var
 ini: TMemIniFile;
begin
 ini:=TMemIniFile.Create('');
 try
   ini.WriteString('ini_section','parameter1','value');
   memo1.Lines.Add(ini.ReadString('ini_section','parameter1',''));
 finally
//    ini.UpdateFile;
   ini.Free;
 end;
end;

главное, что тут можно не указывать имя файла, если не планируется сохранение!


DVM   (2011-11-18 10:20:00) [52]


> brother ©   (18.11.11 10:12) [3]


> а мне нужно из TMemoryStream он это умеет?

Можно научить. Посмотри, в TMemoryIniFile есть такой приватный метод:


procedure TMemIniFile.LoadValues;
var
 List: TStringList;
begin
 if (FileName <> '') and FileExists(FileName) then
 begin
   List := TStringList.Create;
   try
     List.LoadFromFile(FileName);
     SetStrings(List);
   finally
     List.Free;
   end;
 end
 else
   Clear;
end;


К сожалению, не виртуальный. LoadFromFile заменяем на LoadFromStream и получаем то что тебе нужно. Еще аналогично можно подправить


procedure TMemIniFile.UpdateFile;
var
 List: TStringList;
begin
 List := TStringList.Create;
 try
   GetStrings(List);
   List.SaveToFile(FFileName);
 finally
   List.Free;
 end;
end;


Ну и в конструкторе переделать, передавать туда TStream.

Т.е возмит за основу TMemIniFile и напиши свой класс.


Anatoly Podgoretsky   (2011-11-18 10:18:00) [53]

> brother  (18.11.2011 10:01:00)  [0]

StringStream


brother   (2011-11-18 10:17:00) [54]

хм...
http://valeevildar.blogspot.com/2009/09/delphi-tmeminifile.html


brother   (2011-11-18 10:14:00) [55]

> с физическим файлом. делаешь фопен, сик и так далее....

имхо да, тока с их обертками О_о или это не так?


Медвежонок Пятачок   (2011-11-18 10:13:00) [56]

А типа сейчас ты работая с ТИнифайлом работаешь не с ним, а с физическим файлом. делаешь фопен, сик и так далее....


brother   (2011-11-18 10:12:00) [57]

идея: держать структуру TIniFile в памяти и читать нужные секции и значения по необходимости...


brother   (2011-11-18 10:09:00) [58]

TMemIniFile нашел, но не до конца понял, он грузит из файла, а мне нужно из TMemoryStream он это умеет?


DVM   (2011-11-18 10:05:00) [59]


> структура INI


> файл нужно держать в памяти

TMemoryIniFile ???


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо