# Native Code > برنامه نویسی در Delphi > مقالات مرتبط با Delphi/Win32 >  مقاله : استفاده از فایلهای INI

## Mahmood_M

به نام خدا ...

قصد داریم در طی یک مقاله روش استفاده از فایلهای INI را بررسی نماییم :

استفاده از فایل INI  برای ذخیره و بازیابی اطلاعات برنامهاغلب اوقات در برنامه های خود نیاز داریم تا اطلاعاتی در مورد برنامه را در جایی ذخیره و با شروع دوباره برنامه آنها را بازیابی نماییم ...
دو راه رایج در این زمینه استفاده از Registry  و فایلهای INI  هستند ...
ما در این مقاله به بررسی فایلهای INI  و آموزش طریقه استفاده از آنها می پردازیم ...
دلفی یونیتی به نام INIFiles در اختیار دارد که امکان استفاده از فایلهای INI را فراهم میکند ، در این یونیت کلاسی به نام  TINIFiles وجود دارد که به وسیله آن می توانیم یک فایل INI  ایجاد کرده و آن را ویرایش نماییم .
قبل از شروع کد نویسی باید یونیت INIFiles را به قسمت Uses فرم اضافه نمایید ...

*ایجاد فایل INI :*
برای ایجاد یک فایل INI باید یک متغیر از این نوع ساخته و سپس با متد Create  و دادن آدرس ، فایل مورد نظر را بسازیم :
var
 MyIniFile : TINIFile;
begin
 MyINIFile := TINIFile.Create("File Address");
end;
با اجرای کد بالا ، فایل INI مورد نظر درآدرس وارد شده در متد Create ساخته خواهد شد و میتوانیم آن را ویرایش نماییم ...

*نوشتن اطلاعات :*
برای نوشتن اطلاعات در فایل INI باید با توجه به نوع داده ( String‌ ،  Integer ، Boolean یا ... ) متد مربوطه را فراخوانی کنیم ...
نام متد مربوط به هر داده برابر است با واژه  " Write " و نام نوع داده ...
به عنوان مثال نوشتن یک مقدار String در فایل INI باید متد  WriteString را فراخوانی نماییم
این متد سه پارامتر دارد :
1. Section  :  این قسمت مـربوط به دسته اطلاعات مـی باشد ، میتوانید برای چند داده مختلف که در فایل INI می نویسید ، یک دسته ( Section ) یکسان وارد نمایید تا در موقع خواندن بتوانید همه آنها را ( با متدی که در ادامه توضیح خواهیم داد ) یکجا بخوانید ...
2. Ident : این پارامتر مربوط به نام مقدار داده می باشد ، هر داده باید دارای یک نام باشد تا موقع خواندن شناخته شود ...
3. Value : این قسمت مربوط به مقدار داده است‌ ، یعنی همان چیزی که باید در فایل نوشته شود ...

هر سه پارامتر بالا از نوع String  هستند ...
سایر متدهای Write ( برای انواع داده ای دیگر ) هم مانند متد بالا 3 پارامتر و به همان نامها دارند ، تنها فرقی که بین آنها نوع مقدار ورودی برای پارامتر  Value است که با توجه به نوع داده ای که میخواهیم وارد نماییم ، متغیر است ، به عنوان مثال برای نوشتن یک داده از نوع Integer باید متد WriteInteger را با پارامترهای زیر وارد نماییم :
MyIniFile.WriteInteger(Section : String;   Ident  : String;  Value : Integer); 

در زیر متد Write برای سایر انواع داده ای دیگر آمده است :
WriteBoolean( Section : String;  Ident : String;  Value : Boolean );
WriteFloat( Section : String;  Ident : String;  Value : Double);
WriteDate( Section : String;  Ident : String;  Value : TDateTime);
WriteTime( Section : String;  Ident : String;  Value : TDateTime);
WriteDateTime( Section : String;  Ident : String;  Value : TDateTime);
WriteBinaryStream( Section : String;  Ident : String;  Value : TStream);

*خواندن اطلاعات :*
برای خواندن اطلاعات ، به جای واژه  Write  باید از Read استفاده نماییم ، متد ReadX ( X  همان نوع داده ای است ) ساختاری مانند متد WriteX دارد ، با این تفاوت که به جای نوشتن اطلاعات ، اطلاعات را می خواند ...
در متد ReadX  به جای پارامتر Value پارامتر Default  قرار دارد ،‌ شما در این پارامتر مقداری را وارد می نمایید تا اگر به هر دلیلی ،  Section  یا Ident  ای که وارد کردید در فایل پیدا نشد و یا مقداری برای داده وجود نداشت ، مقدار برگشتی متد Read ، همان مقدار Default باشد ...
به عنوان مثال فرض کنیم میخواهیم یک مقدار Integer را از فایل INI بخوانیم ، به کد زیر دقت نمایید :
var
  N : Integer;
begin
  N :=  MyIniFile.ReadInteger("MyNum", "MyNum", 3);
end;
بعد از اجرای کد بالا اگر در فایل INI  مربوطه ، Section ای با نام MyNum  یا  Ident ای با نام MyNum وجود نداشته باشد ، مقدار متغیر N  برابر با  3  خواهد بود در غیر این صورت مقدار N  برابر خواهد بود با مقدار موجود در داده ای که Section  و  Ident  آن  MyNum  باشد ...

متد Read  برای سایر داده ها به شرح زیر است :
ReadString( Section : String;  Ident : String;  Default : String);
ReadInteger( Section : String;  Ident : String;  Default : Integer);
ReadBool( Section : String;  Ident : String;  Default : Boolean);
ReadDate( Section : String;  Ident : String;  Default : TDateTime);
ReadTime( Section : String;  Ident : String;  Default : TDateTime);
ReadDateTime( Section : String;  Ident : String;  Default : TDateTime);
ReadBinaryStream( Section : String;  Ident : String;  Default : TStream);

*خواندن گروهی اطلاعات :*
کلاس TINIFile دو متد به نامهای ReadSection  و ReadSectionValues دارد که امکان خواندن گروهی از اطلاعات را می دهد ...
منظور از گروه همان Section ای است که برای نوشتن اطلاعات وارد نموده اید ، به عنوان مثال اگر سه داده String در فایل نوشته باشید و نام Section هر سه آنها را " MySection " گذاشته باشید ، می توانید ، آن 3  مقدار را در یک TStrings ، قرار دهید ...
ساختار این متدها به شرح زیر می باشد :
ReadSection( Section : String;  Strings : TStrings );
ReadSectionValues( Section : String;  Strings : TStrings );
خواندن لیست گروه ها ( Sections‌ ) :
با استفاده از متد ReadSections میتوانید ، لیست تمام گروه های موجود در فایل INI را دریافت نمایید و در یک TStrings قرار دهید :
ReadSections( Strings : TStrings );

*سایر متدها و توابع :*

متد EraseSection  : 
با استفاده از این متد میتوانید یک Section  خاص را از فایل حذف نمایید ( اطلاعات آن را پاک کنید ) :
EraseSection( Section : String );

متد DeleteKey ‌:
به وسیله این متد می توانید یک مقدار را از فایل حذف نمایید ، این متد دو پارامتر برای نام Section و نام Ident دارد :
DeleteKey( Section : String;   Ident : String );

تابع SectionExists  :
با استفاده از این تابع میتوانید چک کنید که آیا یک Section   خاص در فایل قرار دارد یا خیر ،‌مقدار برگشتی این تابع از نوه Boolean می باشد :
SectionExists( Section : String ) : Boolean;

تابع ValueExists  :
به وسیله این تابع میتوانید چک کنید که آیا یک مقدار در فایل وجود دارد یا خیر ، مقدار برگشتی این تابع از نوع Boolean می باشد :
ValueExists( Section : String;  Ident : String );

متد UpdateFile :
این متد وظیفه بروز رسانی فایل INI  و پاک کردن بافر استفاده شده فایل INI را دارد و بهتر است بعد از چندین عمل خواندن و نوشتن فراخوانی شود تا فایل INI برای کار مجدد آماده شود.

خاصیت FileName  :
این خاصیت فقط خواندنی می باشد ( ReadOnly ) و به وسیله آن می توانید نام ( و آدرس ) فایل INI را نمایش دهید ... 

پایان ...

امیدوارم مفید بودن باشه ...
PDF این مقاله رو می تونید از *اینجا* دریافت کنید ...

موفق باشید ...

----------


## mossaferin

سلام

برنامه من علیرغم وجود کد 
MyINIFile := TINIFile.Create("File Address");
Writeinteger( 'test','test1',200 );


در همان متد گفته شده ، هیچ فایل INI ی نمی سازه

میشه لطفا راهنمایی کنید

ممنون

----------


## delphi_programmer_2010

منم موفق نشدم.اگر ممکنه یک مثال کامل بذارید
ممنون

----------


## Felony

> منم موفق نشدم.اگر ممکنه یک مثال کامل بذارید
> ممنون



var
  MyFile: TIniFile;
begin
  MyFile:= TIniFile.Create('D:\TestFile.ini');
  try
    MyFile.WriteString('TestSection', 'TestIdent', 'Sample Text');
  finally
    MyFile.Free;
  end;
end;

----------


## BORHAN TEC

مقاله خوبی بود....
*به نظر من اگه در رابطه با فایلهای XML هم مقاله ای نوشته بشه خیلی خوبه.* :متفکر:

----------


## عقاب سیاه

> PDF این مقاله رو می تونید از اینجا دریافت کنید ..


لينك خراب است!!

----------


## ardshir10

لينك pdf خراب است

----------

