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

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

Вопрос по TiniFile [D7, XP]


dabreezy ©   (2006-02-01 11:57:00) 

Добрый день.
Интересный вопрос по TiniFile. Пишу в программе следующее:

var
 ini: tinifile;
begin
Ini := TIniFile.Create('app.ini');
try
Ini.writeInteger('Interface','AAA', 800);
finally
  Ini.Free;
end;

Почему-то файл app.ini в текущей директории не создается(вообще на диске не создается). Стоит только написать путь TIniFile.Create('c:\app.ini'); все работает. Почему так. В Help'е делфи есть пример, там тоже без пути файл указывается. И еще вопрос как получить директорию из которой программа запущена? application.exename возвращает путь с exe файлом программы, не охота писать процедуру которая бы вырезала только путь.
Спасибо


Gero   (2006-02-01 13:38:00) [1]

> Если из оболочки, то она выставит WorkDir. Если из комстроки..
> Ты много знаешь юзеров, которые вызывают программу таким
> способом ? Я - ни одного.

Я, например. А еще я пользуюсь «открыть с помощью».
Если бы чбя-то программа создавала свои ini возле тех файлов, что я открываю, я бы отправил ее в корзину.

> Тогда да. Хотя опять же большинство юзвкерей работают в
> аналоге "Мои документы". Туда, наверное и стОит писать персонифицированны
> е установки

Не стоит, мои документы предназначены для доументов. Для хранения настроек предназначена папака Application Data, специально для этого.

> Опять же, в 98/95 такой папки нет

Опять же, вызывается функция SHGetSpecialFolderPath и она возвращает папку, которая есть.

> Это значит, что есть две разные программы, использующие
> ини-файлы с одним и тем же именем. Ситуация достаточно популярная.

Ну так в чем проблема — у каждой программы свой каталог. Не понял сути проблемы.

> Ага, вот это я приду к каждому из 30 своих пользователей,
> чтобы снять страховочные копии рабочих БД (в rar к примеру)
> и буду помимо папки с прогой еще гадать где там ее ини
> сидит ?

А что ты будешь делать если  сохранять ini как ты предлагешь?
А помнить не надо, достатчно хранить все в одном месте.

> Ну да, если наизусть помнишь какой ини к какой проге относится.
> В том числе и ини тех программ, которые давно выкинуты за
> ненадобностью

Ну если папка назыается Adobe/Photoshop то,наверняка там размещены исходники программы Adobe Photoshop, а есил Borland/Delphi — то, вероятно, Borland Delphi.

> Но ведь установки борландовских и мелкософтовых прог находятся
> в разных папках (разделах реестра), не так ли ?

Не знаю, зависти от программ и потребностей. Delphi хранит данные в HKCU\Borland\Delphi\<version>\

> "Нормальный" - понятие весьма относительное.

Да, согласен. Для котого и Автошема — идеал.

> В целом же, конечно, на вкус и цвет..

В целом да, но я предпочитаю следовать общепринятым стандартам, рекомментованых разработчиками ОС в частности.


Ega23   (2006-02-01 13:32:00) [2]

TIniFile.Create(ExtractFilePath(ParamStr(0))+'app.ini').


msguns   (2006-02-01 13:28:00) [3]

>Gero ©   (01.02.06 13:11) [10]
>А если я exe-файл буду запускать?

Если из оболочки, то она выставит WorkDir. Если из комстроки..
Ты много знаешь юзеров, которые вызывают программу таким способом ? Я - ни одного.

>Если это настройки программы, то да: у каждого пользователя свои предпочтения.

 Тогда да. Хотя опять же большинство юзвкерей работают в аналоге "Мои документы". Туда, наверное и стОит писать персонифицированные установки

>Такие настройки должны хранится в D&S\All Users\Application Data

Опять же, в 98/95 такой папки нет ;)

>> В-третьих, что делать с одноименными ини-файлами, "зашитыми"
>> в прогу ?
>Не свосем понял как это. Если файл не подлежит изменению пользователем, тогда можно и в каталог с программой писать.

 Это значит, что есть две разные программы, использующие ини-файлы с одним и тем же именем. Ситуация достаточно популярная.

>Не понял? Скопировать ini-файл(ы) это проблема? Особенно когда знаешь, где они хранятся.

 Ага, вот это я приду к каждому из 30 своих пользователей, чтобы снять страховочные копии рабочих БД (в rar к примеру) и буду помимо папки с прогой еще гадать где там ее ини сидит ?

>Для каждой программы совй каталог. Очень хорошо и наглядно. И перенести можно настройки сразу всех программ.

Ну да, если наизусть помнишь какой ини к какой проге относится. В том числе и ини тех программ, которые давно выкинуты за ненадобностью

>Зря, это наиболее правильный способ, который использует Microsoft, Borland, Adobe

Вот именн. "Фирменные" программы не мешают друг другу, а часто даже "помогают". Именно поэтому установки всех их хранятся централизованно. Но ведь установки борландовских и мелкософтовых прог находятся в разных папках (разделах реестра), не так ли ?

>и вобще используется практически во всех нормальных программах.

"Нормальный" - понятие весьма относительное. "Кому и кобыла невеста" (с)

В целом же, конечно, на вкус и цвет..


Gero   (2006-02-01 13:12:00) [4]

> [9] Плохиш ©   (01.02.06 13:02)

Я предпочитаю SHGetSpecialFolderPath :)


Gero   (2006-02-01 13:11:00) [5]

> Если единожды правильно задать рабочую папку в ярлыке на
> запуск проги, то никакого "расплодения" не будет

А если я exe-файл буду запускать?

> Во-первых, это только для ХР

Ну я же не буквально говорил этот путь, а SHGetSpecialFolderPath с параметром CSIDL_APPDATA. В W2k и выше будет возвращать каталог в Documents And Settings, в более старых системах — %windir%\Application Data.

> то у каждого свой ини

Если это настройки программы, то да: у каждого пользователя свои предпочтения.

> Далеко не все установки могут юыть персонифицированными,
> например, путь к БД.

Такие настройки должны хранится в D&S\All Users\Application Data

> В-третьих, что делать с одноименными ини-файлами, "зашитыми"
> в прогу ?

Не свосем понял как это. Если файл не подлежит изменению пользователем, тогда можно и в каталог с программой писать.

> В-четвертых, криво снимать архивы или просто копировать
> программу с одного компа на другой, если требуется перенести
> и сетинги.

Не понял? Скопировать ini-файл(ы) это проблема? Особенно когда знаешь, где они хранятся.

> В-пятых, куча сетингов в одной папке не есть хорошо, если
> программ много.

Для каждой программы совй каталог. Очень хорошо и наглядно. И перенести можно настройки сразу всех программ.

> Короче, нафиг-нафиг ;)

Зря, это наиболее правильный способ, который использует Microsoft, Borland, Adobe и вобще используется практически во всех нормальных программах.


Плохиш   (2006-02-01 13:02:00) [6]


> Самый правильный на сегодняший день способ — C:\Documents
> And Settings\<UserName>\Application Data\<Program Name>

 IncludeTrailingPathDelimiter(GetEnvironmentVariable('APPDATA')) + ChangeFileExt(ExtractFileName(Application.ExeName), '.ini');


msguns   (2006-02-01 12:23:00) [7]

>Gero ©   (01.02.06 12:17) [7]
>Ini-файлы будут плодится по всему винчестеру.

 Если единожды правильно задать рабочую папку в ярлыке на запуск проги, то никакого "расплодения" не будет

>Самый правильный на сегодняший день способ — C:\Documents And Settings\<UserName>\Application Data\<Program Name>

Эге ж ? Во-первых, это только для ХР, во вторых если работает несколько разных юзеров за одним компом (довольно частый случай на "производстве"), то у каждого свой ини ? Далеко не все установки могут юыть персонифицированными, например, путь к БД.
В-третьих, что делать с одноименными ини-файлами, "зашитыми" в прогу ?
В-четвертых, криво снимать архивы или просто копировать программу с одного компа на другой, если требуется перенести и сетинги.
В-пятых, куча сетингов в одной папке не есть хорошо, если программ много.

Короче, нафиг-нафиг ;)


Gero   (2006-02-01 12:17:00) [8]

> "Правильный" способ указания места для установок:

Крайне непраивльный способ.
Ini-файлы будут плодится по всему винчестеру.

Самый правильный на сегодняший день способ — C:\Documents And Settings\<UserName>\Application Data\<Program Name>


msguns   (2006-02-01 12:12:00) [9]

"Правильный" способ указания места для установок:

with TIniFile.Create(GetCurrentDir+'\'+CMAIN_INIFILENAME) do


Gero   (2006-02-01 12:06:00) [10]

Note: Usually INI files are stored in the \WINDOWS directory. To work with an INI file in another location, specify the full path name of the file in FileName.


dabreezy   (2006-02-01 12:04:00) [11]


> Gero ©

Спасибо за функцию. А где файл создается? В TEMP?


Плохиш   (2006-02-01 12:04:00) [12]


> dabreezy   (01.02.06 12:04) [3]
>
> > Gero ©
>
> Спасибо за функцию. А где файл создается? В TEMP?

А поиск по диску сделать слабо?


ЮЮ   (2006-02-01 12:02:00) [13]


> не охота писать процедуру которая бы вырезала только путь

ExtractFilePath, ExtractFileDir


Gero   (2006-02-01 12:00:00) [14]

> вообще на диске не создается

Вобще создается, только не там, где ты думаешь.

> не охота писать процедуру которая бы вырезала только путь.

Уже написана ExtractFilePath.


Наверх

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