Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по TiniFile   Найти похожие ветки 

 
dabreezy   (2006-02-01 11:57) [0]

Добрый день.
Интересный вопрос по 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 12:00) [1]

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

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

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

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


 
ЮЮ ©   (2006-02-01 12:02) [2]


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

ExtractFilePath, ExtractFileDir


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


> Gero ©

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


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


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

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


 
Gero ©   (2006-02-01 12:06) [5]

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.


 
msguns ©   (2006-02-01 12:12) [6]

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

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


 
Gero ©   (2006-02-01 12:17) [7]

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

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

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


 
msguns ©   (2006-02-01 12:23) [8]

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

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

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

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

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


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


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

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


 
Gero ©   (2006-02-01 13:11) [10]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


 
Gero ©   (2006-02-01 13:12) [11]

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

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


 
msguns ©   (2006-02-01 13:28) [12]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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


 
Gero ©   (2006-02-01 13:38) [14]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.037 c
2-1138605304
pavel_guzhanov
2006-01-30 10:15
2006.02.19
как определить имя директории в OpenDialog


4-1133550476
Хинт
2005-12-02 22:07
2006.02.19
Как избежать TerminateProcess?


2-1138605317
Дмитрий_К
2006-01-30 10:15
2006.02.19
DBGrid - MultiSelect -3


3-1135327067
td
2005-12-23 11:37
2006.02.19
подключение к ораклу 9


15-1138362588
DillerXX
2006-01-27 14:49
2006.02.19
Ноутбук - что посоветуете счастливому обладателю? :)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский