PDA

View Full Version : مقاله : استفاده از فایلهای INI



Mahmood_M
شنبه 24 شهریور 1386, 12:32 عصر
به نام خدا ...

قصد داریم در طی یک مقاله روش استفاده از فایلهای 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 این مقاله رو می تونید از اینجا (http://nabegheh.parsaspace.com/DelphiTutrials/INI%20Files.pdf) دریافت کنید ...

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

mossaferin
پنج شنبه 03 بهمن 1387, 18:03 عصر
سلام

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


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

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

ممنون

delphi_programmer_2010
یک شنبه 02 آبان 1389, 14:50 عصر
منم موفق نشدم.اگر ممکنه یک مثال کامل بذارید
ممنون

Felony
یک شنبه 02 آبان 1389, 16:16 عصر
منم موفق نشدم.اگر ممکنه یک مثال کامل بذارید
ممنون


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

BORHAN TEC
سه شنبه 04 آبان 1389, 16:07 عصر
مقاله خوبی بود....
به نظر من اگه در رابطه با فایلهای XML هم مقاله ای نوشته بشه خیلی خوبه.:متفکر:

عقاب سیاه
شنبه 04 دی 1389, 16:35 عصر
PDF این مقاله رو می تونید از اینجا دریافت کنید ..
لينك خراب است!!

ardshir10
سه شنبه 17 آبان 1390, 12:50 عصر
لينك pdf خراب است