![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Многа букав в ini файле, как?
Wito © (2009-10-20 09:19:00)Есть прога, есть config.ini к ней, многострочный текст превращаю в поток (TStringStream), сохраняю в ini файл как поток. Проблема в следующем: когда текста много 2кб+ часть потока обрезается и переносится на следующую строку в ini файле, и прочитать полностью не удается.
Подскажите плз как выйти из этой ситуации.
Loginov Dmitry (2009-10-21 09:45:00) [1]
> Есть прога, есть config.ini к ней, многострочный текст превращаю
> в поток (TStringStream), сохраняю в ini файл как поток.
> Проблема в следующем: когда текста много 2кб+ часть потока
> обрезается и переносится на следующую строку в ini файле,
> и прочитать полностью не удается.
> Подскажите плз как выйти из этой ситуации.
Чем работаете с ини файлами? Если используете класс TIniFile, то вы можете записать в одной строке 64К, а прочитать 2К. Если через API, то можете записать в одной строке 64К, и прочитать 64К.
TMemIniFile лишен каких-либо ограничений, но требует монопольного владения ини-файлом. TSafeIniFile лишен указанный ограничений, не требует монопольного владения ини-файлом.
Плохиш (2009-10-20 16:40:00) [2]Прикольно, пишут в ини символы перевода строк, а спрашивают про многа букав. Неужели "здесь светлее"?
DVM (2009-10-20 11:37:00) [3]
> Kolan © (20.10.09 11:14) [18]
> бинарный формат тоже может быть универсальным.
Может, но этого сложнее добиться.
Kolan (2009-10-20 11:14:00) [4]Не-не, подождите. Возможность прочесть или отредактировать — побочный эффект, ладно, пусть так.
А какой тогда основной эффект?
Универсальность? — Это вопрос стандартизации, бинарный формат тоже может быть универсальным.
Anatoly Podgoretsky (2009-10-20 11:03:00) [5]> Kolan (20.10.2009 10:53:16) [16]
Так исторически сложилось, поскольку это универсальный формат и в крайнем случае файл можно создать и редактировать простым текстовым редактором и практически любая ОС имеет в своем составе редактор, но это побочный эффект.
Kolan (2009-10-20 10:53:00) [6]Так если формат не для чтения людьми придуман таким, то для чего тогда? Для компьютера, почему тогда не бинарный?
Anatoly Podgoretsky (2009-10-20 10:48:00) [7]Побочный эффект формата и наличия штатного визуализатора.
Kolan (2009-10-20 10:45:00) [8]Побочный эффект чего?
Anatoly Podgoretsky (2009-10-20 10:29:00) [9]> Kolan (20.10.2009 10:06:10) [10]
Вообще то человек тут ни причем, а то что может прочесть - это просто побочный эффект. Прочесть можно что угодно, нужен только виализатор.
pest (2009-10-20 10:23:00) [10]зачем все усложнять с архивированием и всякими потоками. банальная задача например сохранять двух-трех строчный хинт для каких-то элементов на форме в ини файле скажем для перевода программы на другие языки.
сохранение
s := StringReplace(memo1.lines.text, #13#10, #01, [rfReplaceAll]);
inifile.WriteString('main', 'myhiht', s);
загрузка
s := inifile.ReadString('main', 'myhiht', '');
s := StringReplace(s, #01, #13#10, [rfReplaceAll]);
memo1.lines.text := s;
Сергей М. (2009-10-20 10:07:00) [11]
> Wito (20.10.09 09:48) [6]
Понятно.
Ну с тем же успехом можно было бы обойтись средствами BinToHex()
var
tmp: String;
..
SetLength(tmp, Length(s) * 2);
BinToHex(PChar(tmp), PChar(s), Length(tmp));
inif.WriteString('Section', 'var1', tmp);
Kolan (2009-10-20 10:06:00) [12]Если упаковывать, то зачем тогда ини? Ини он нужен для того, чтобы человек тоже мог прочесть. Если этого не требуется, то надо использовать бинарный файл.
Wito (2009-10-20 10:03:00) [13]А как на счет такой идеи: упаковать zlib-м строку и сохранить в виде потока!
Anatoly Podgoretsky (2009-10-20 10:01:00) [14]> Wito (20.10.2009 09:39:02) [2]
ИНИ файл не средство для хранения больших по размеру данных, используй текстовый файл.
pest (2009-10-20 09:51:00) [15]я выходил из ситуации так: перед сохранением текста в ини файл заменяю символы "#13#10" например на "#01".
при чтении заменяешь обратно
Wito (2009-10-20 09:48:00) [16]Ну чтоб сохранить строку в виде потока! Если сохранять мультистрочный текст в ини, то прочесть потом удастся только первую строку...
Сергей М. (2009-10-20 09:45:00) [17]А для чего вообще тут понадобился TStringStream ?
Wito (2009-10-20 09:45:00) [18]Может и так, тоесть нет ограничения на длинну строки в текст файле?
Kolan (2009-10-20 09:42:00) [19]Может разрыв создает средство просмотра файлов? Блокнот, например.
Wito (2009-10-20 09:39:00) [20]Пишу так(s - большая строка):
st:=TStringStream.Create(s);
inif.WriteBinaryStream('Section','var1',st);
Ну и открываю инифайл, там чтото вроде этого:
var1=5271B0E5360200000100...разрыв!
1B0E536020
var2=djalgjakdsg