Solved

INI Files

Posted on 2004-08-10
7
502 Views
Last Modified: 2010-04-05
What are INI files for and are they used in Delphi applications? Could you store info in these files and load them into your program, if so could someone give me an example on how to set that up?
0
Comment
Question by:c-prompt
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
7 Comments
 
LVL 4

Expert Comment

by:alikoank
ID: 11763502
yes, they are used to store/retrieve information, mostly for configuration data. You can also use windows registry for this purpose.

For more information look at

http://delphi.about.com/library/weekly/aa120401a.htm
0
 
LVL 17

Expert Comment

by:Wim ten Brink
ID: 11763638
The INI files format is a bit antiquated mechanism for storing a reasonable small amount of configuration data. It's biggest advantage is that it can be edited by using Notepad, thus you can make changes without starting the associated application. INI files are still pretty popular since they're easy to use and reasonable fast. Especially since INI files are divided in sections and every section has a key-value pair, they can have quite a few uses.

You could use the registry instead but here lies a minor problem. If your application is installed in a network environment, and needs default settings for all the PC's connected to it, storing this settings in the registry would just bring total chaos. Because every user will have his own set of registry settings, every user would need to know the default values and changing them globally is just impossible. Thus an INI file is useful for global configuration data while the registry is just a more personalized configuration set.

But at this moment, XML seems to become a new standard for storing configurations. Especially because XML is more like a tree with lots of levels while an INI file is just a list of key-values in a list of sections.

For the ise of Inifiles, see the IniFiles unit. The use is somewhat like this:

var IniFile: TInifile;
begin
  IniFile := TIniFile.Create('YourINIFile.ini');
  try
    IniFile.WriteString('Section','Key',AValue);
    AValue := IniFile.ReadString('Section','Key','DefaultValue');
  finally
    IniFile.Free;
  end;
end;

That's writing and reading data... Integers in this case. See the helpfiles for more info.
0
 
LVL 12

Accepted Solution

by:
Ivanov_G earned 90 total points
ID: 11763793
the INI file have format like this;

[GeneralOptions]
Option1=1
Option2=abcd

[SecondSection]
AnotherOption=3.5

Basicly in IniFile you can store different type of Information. When you want to access it, you declare variable of type TIniFIle

var
  INI : TIniFile;
  lc_int : Integer;
  lc_str : String;
begin
  // open the file
  Ini := TIniFile.Create('C:\Options.ini');
  // read integer
  lc_int := Ini.ReadInteger('GeneralOptions', 'Option1', 0);
  // read string
  lc_str := Ini.ReadString('GeneralOptions', 'Option2', '');
  // close the file
  Ini.Free;

this is example of reading. Writing is easy to find out by ourself, having in mind that the TINIFile class have methods WriteInteger, WriteString, etc.

Hope this helps.
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 

Expert Comment

by:adayuer
ID: 11794136
TIniFile.Create(IniFileName);
if IniFileName is NOT a full path name, TIniFile will search it in windows home directory (such as c:\windows, windows9x/me/xp or c:\winnt , win2000) by default. if the file exist then open else create it automatically.


adayuer
0
 
LVL 12

Expert Comment

by:Ivanov_G
ID: 11803820
adayuer, what you said is not really true...

INI file can be in any folder you wish. Actually the application search for it in the current folder and folders in PATH. That's why it better to give the full path. Because if you say just CONFIG.INI and it is in your application folder, when the current directory is changed, it won't be found anymore.

That's why giving the full path will save you troubles. Putting you configuration files in Windows folder is a little shitty, since WINDOWS folder don't belong to you. Thus you are making garbage there.
0
 

Expert Comment

by:adayuer
ID: 11805132
to Ivanov G:

hi, I found some source code in Delphi Source Code like this:



TCustomIniFile = class(TObject)
  private
    FFileName: string;
  public
    constructor Create(const FileName: string);
     ....
    property FileName: string read FFileName;
  end;

constructor TCustomIniFile.Create(const FileName: string);
begin
  FFileName := FileName;
end;

TIniFile = class(TCustomIniFile)
  public
    destructor Destroy; override;
     ....
    procedure UpdateFile; override;
  end;

destructor TIniFile.Destroy;
begin
  UpdateFile;
  inherited Destroy;
end;

procedure TIniFile.UpdateFile;
begin
  WritePrivateProfileString(nil, nil, nil, PChar(FFileName));
end;


then I found "WritePrivateProfileString" detail information in MSDN, like this:

BOOL WritePrivateProfileString(
  LPCTSTR lpAppName,
  LPCTSTR lpKeyName,
  LPCTSTR lpString,
  LPCTSTR lpFileName
);

about lpFileName, in Remarks section, there have some words : "If the lpFileName parameter does not contain a full path and file name for the file, WritePrivateProfileString searches the Windows directory for the file. If the file does not exist, this function creates the file in the Windows directory.

If lpFileName contains a full path and file name and the file does not exist, WritePrivateProfileString creates the file. The specified directory must already exist. "


ok ,all things became clear, the core of this question is TIniFile.UpdateFile  procedure. this procedure call the win api "WritePrivateProfileString" , TIniFile.Create()'s paramter is the WritePrivateProfileString's last paramter - lpFileName.
"WritePrivateProfileString searches the Windows directory for the file. If the file does not exist, this function creates the file in the Windows directory." is my answer's base.


for more information, I wrote code :

var
   ini : TIniFile ;
begin
   ini := TIniFile('test.ini');
   ini.WriteString('test', 'name', 'value') ;
   ini.Free ;
end;

when i run these codes, i found the file "test.ini" in Windows Home Direcotry, i removed "test.ini" from Windows Home Directory to my App Current Directory. then i change my code :
   ini.WriteString('test', 'name', 'value1') ;
 
run  again,  I found new "test.ini" created in Windows Home Directory, it's content :
[test]
name=value1

i open "test.ini" in my app Directory, the content:
[test]
name=value

the application do NOT search for the ini file in OTHER folder(s) except Windows Directory otherwise you give it a full  path.

I agree with you about "Putting you configuration files in Windows folder is a little shitty, since WINDOWS folder don't belong to you. Thus you are making garbage there."



08 15, 2004
Regards, adayuer


0
 

Expert Comment

by:adayuer
ID: 11805154
God bless me, if you couldn't understand my poor english, so...so...so...so...I am CRAZY...

good wishs to you.   :)
0

Featured Post

[Live Webinar] The Cloud Skills Gap

As Cloud technologies come of age, business leaders grapple with the impact it has on their team's skills and the gap associated with the use of a cloud platform.

Join experts from 451 Research and Concerto Cloud Services on July 27th where we will examine fact and fiction.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The uses clause is one of those things that just tends to grow and grow. Most of the time this is in the main form, as it's from this form that all others are called. If you have a big application (including many forms), the uses clause in the in…
In this tutorial I will show you how to use the Windows Speech API in Delphi. I will only cover basic functions such as text to speech and controlling the speed of the speech. SAPI Installation First you need to install the SAPI type library, th…
In this video, viewers will be given step by step instructions on adjusting mouse, pointer and cursor visibility in Microsoft Windows 10. The video seeks to educate those who are struggling with the new Windows 10 Graphical User Interface. Change Cu…
In this video we outline the Physical Segments view of NetCrunch network monitor. By following this brief how-to video, you will be able to learn how NetCrunch visualizes your network, how granular is the information collected, as well as where to f…
Suggested Courses
Course of the Month8 days, 11 hours left to enroll

617 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question