Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Добавить материал
 

TIniFile. Работа с Ini-файлами в Delphi.


Комментарии посетителей:


Дата 26.2.2008, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата
bems ****   Репутация: 31  Всего: 88 
Цитата(Alexeis @  26.2.2008,  10:20 Найти цитируемый пост)
Это не значит, что обязательно, это ближе к слову ЧАСТО или ПРИНЯТО. Можно куда угодно его сувать. 
а ПРАВИЛЬНО - в каталоге юзера

Добавлено через 12 минут и 28 секунд
Цитата(THandle @  26.2.2008,  13:07 Найти цитируемый пост)
Результат: файл не найден, хотя находится в каталоге нашей программы, ключ невозможно прочитать, и поэтому в сообщении показывается не записанное нами в значение, а параметр Default равный в данном случае 'Not found'.

логика поиска описана в хелпе к функции WritePrivateProfileString

PM MAIL   Вверх

Дата 26.2.2008, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата
aktuba ***   Репутация: 16  Всего: 38 
Цитата(Magik @ 26.2.2008,  09:59)
Есть способ хранить настройки и данные в файле *.dat. Такой способ лучше тем, что прочитать его содержимое (или изменить) - дело бесполезное.

С чего это ты решил? Смотря как хранится в самом файле, а в .dat можно хранить как угодно, хоть тот же .ini...
PM MAIL WWW   Вверх

Дата 26.2.2008, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата
Alexeis Group Icon   Репутация: 109  Всего: 459 
Цитата(bems @  26.2.2008,  17:35 Найти цитируемый пост)
а ПРАВИЛЬНО - в каталоге юзера

  Все зависит от желаемого функционала. Что от чего должно зависеть и сохраняться. По современным требованиям это вообще должен быть либо реестр либо папка Aplication Data текущего юзера. 
  В Своем каталоге обычно хранят настройки простые программы, для которых весь дом ограничивается своей папкой. Если приложение регистрируют COM/ActiveX, то оно в любом случае зависимо от текущей ОС. 
PM ICQ   Вверх

Дата 27.2.2008, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата
bems ****   Репутация: 31  Всего: 88 
Цитата(Alexeis @  26.2.2008,  20:27 Найти цитируемый пост)
По современным требованиям это вообще должен быть либо реестр либо папка Aplication Data текущего юзера. 
и я о том же. Если рееестр, то в кусте пользователя.

Цитата(Alexeis @  26.2.2008,  20:27 Найти цитируемый пост)
В Своем каталоге обычно хранят настройки простые программы, для которых весь дом ограничивается своей папкой
Если говорить о том что наблюдается, то ты прав. А если о том как надо - то изменение места хранения настроек не усложняет программу, она как была простой, так ею и останется. Но зато упростит установку, потому что не нужно проверять и устанавливать разрешения на запись в папку программы

PM MAIL   Вверх

Дата 11.3.2008, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата
Lexicss *   Репутация: нет  Всего: 1 
Эх, вот бы мне эту статейку полтора года назад встретить. - когда нужно было срочно разбираться с инишками, пришлось тратить время и экспериментить. А наткнулся бы сразу на эту статеку - 5 минут и хватило б. smile
PM MAIL WWW ICQ   Вверх

Дата 11.3.2008, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата
MetalFan ****   Репутация: 62  Всего: 128 
все расжевано так, что даже самые одаренные поймут. хотя в справке и так все нормально и подробно написано, за исключением примеров
PM MAIL   Вверх

Дата 12.3.2008, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата
THandle Group Icon   Репутация: 65  Всего: 372 
Цитата(MetalFan @  11.3.2008,  20:48 Найти цитируемый пост)
все расжевано так, что даже самые одаренные поймут. хотя в справке и так все нормально и подробно написано, за исключением примеров


К сожалению все эти "самые одаренные" даже не слышали о справке, а если и слышали, то не юзают, так как на английском, и якобы не понятно smile
PM WWW   Вверх

Дата 17.7.2008, 16:32 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата
Saygak   Репутация: 1  Всего: 1 
В методе ReadSectionValues в примере нужно заменить 
Код

  Ini.ReadSectionValues(Memo1.Lines);

на 
Код

  Ini.ReadSectionValues('Section1', Memo1.Lines);

PM MAIL ICQ   Вверх

Дата 17.7.2008, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата
THandle Group Icon   Репутация: 65  Всего: 372 
Интересно как такой пример вообще прошел в статью)) вроде бы все проверял...

Изменено.


Saygak, +1 в репу.
PM WWW   Вверх

Дата 3.3.2010, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата
skeef   Репутация: нет  Всего: нет 
Перерыл пол-инета нигде не могу найти ответ на простейший вопрос:
формат комментариев в ini файлах Delphi.
Как правильно?
PM MAIL   Вверх

Дата 21.3.2010, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата
Heriz   Репутация: нет  Всего: нет 
Вопрос: Как проверить параметр в ини файле и занести в программу?Используется параметр MainMenu1.Images:=imagesList1; и есть второй Imagelist2
 smile 
PM MAIL ICQ   Вверх

Дата 21.3.2010, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата
Alexeis Group Icon   Репутация: 109  Всего: 459 
Цитата(skeef @  3.3.2010,  17:57 Найти цитируемый пост)
Перерыл пол-инета нигде не могу найти ответ на простейший вопрос:
формат комментариев в ini файлах Delphi.
Как правильно? 


через ";"
например 
;comment


Цитата(Heriz @  21.3.2010,  12:18 Найти цитируемый пост)
Вопрос: Как проверить параметр в ини файле и занести в программу?

Параметр в INI можно только прочитать. Если его нет, то будет подставлено значение по умолчанию.
PM ICQ   Вверх

Дата 21.3.2010, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата
RomanEEP **   Репутация: 5  Всего: 8 
Цитата(Alexeis @  21.3.2010,  13:44 Найти цитируемый пост)
Параметр в INI можно только прочитать. Если его нет, то будет подставлено значение по умолчанию.

Для проверки наличия параметра есть функция function ValueExists(const Section, Ident: string): Boolean;

При работе с Ini файлами в Delphi 2010 столкнулся с жесткими косяками в TMemIniFile:

1) Access Violation при открытии пустых файлов в строке 727 Inifiles.pas из-за кода
  SetLength(Buffer, Size);
  Stream.Read(Buffer[0], Size); проверить size на 0 нынче не модно...

2)Для быстрого поиска подстроки используются хешированные стринг-листы в которых обновление хеша сделано крайне неграмотно:
при любом изменении стринг листа хеш перестраивается заново!
то есть если в секции есть 100 строк, то добавление 101 строки вызовет пересчет хеш функции для всех 100 строк.
Благодаря этому файл в пару сотен строк пишется секунд 5!

Использовать ини файлы ушло всякое желание когда наткнулся на юнит NativeXml - который стал бесплатен. Имеет интуитивно понятный и небольшой набор функции, который быстро заменит сохранение в ини-файлы  + большая гибкость xml + высокая скорость работы.
Для примера: время чтения с диска и распарсивания файла размеров в 500Kb (около 50000 значений) занимает 0,2с на 1800MHz.
За собой тянет один единственный модуль размеров в 6000 строк
PM MAIL   Вверх

Дата 21.3.2010, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата
Alexeis Group Icon   Репутация: 109  Всего: 459 
Цитата(RomanEEP @  21.3.2010,  14:34 Найти цитируемый пост)
При работе с Ini файлами в Delphi 2010 столкнулся с жесткими косяками в TMemIniFile:

А если воспользоваться старым добрым TIniFile ? Дело в том, что Ini файлы предназначены для хранения небольших объемов файлов. Тут нет оптимизации по скорости. Не подразумевается частое обращение. Простой способ сохранить уникальные данные.

PM ICQ   Вверх

Дата 21.3.2010, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата
RomanEEP **   Репутация: 5  Всего: 8 
Согласен? но TMemIniFiles создавался как оптимизированый вариант TIniFile и надо же было к 2010 году ембаркадеровцам соптимизировать так что сделали раз в 10 медленней оригинала!

ЗЫ: Еще в по поводу методов WriteFloat, ReadFloat во первых они записывают не натуральные, а действительные числа)))) а во вторых есть неприятная особенность, что если в системе сменится DecimalSeparator или IniFile будет читаться с другого компа, то эти значения просто напросту не считаются! Приходится придумывать велосипеды вроде смены разделителя при чтении из инишки или переопределения метода ReadFloat, WriteFloat
PM MAIL   Вверх

Страницы: (3) Все 1 [2] 3 
 
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1576 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.