استفاده از فایل 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 را نمایش دهید ... پایان ...