![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TIniStream реальность?
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 ???