کار با فایلهای INI در سی شارپ

یکی از دغدغه های  توسعه دهندگان نرم افزار ، ذخیره مقادیر تنظیمات بغیر از بانک داده ، دری  یک فایل است و خیلی مهم است که این فایل دارای ساختار منظمی باشد و مقدار دهی و فراخوانی مقدار از آن به راحتی میسر باشد.

فایل های INI فایل های استاندارد متنی هستند که بسیاری از برنامه های حرفه ای ، بخشی از تنظیمات مانند لوکیشن واندازه فرم ، فونت یک لیبل ، رمز و ایمیل و …را در آنها ذخیره می کنند.

اگر برای شما ذخیره و فراخوانی این نوع تنظیمات در بانک داده دشوار است ، با این روش میتوانید بسیاری از مشکلات ذخیره و فراخوانی مقادیر در فایل را حل کنید

ساختار فایلهای INI به شکل زیر است:

[نام بخش یک]

نام کلید یک = مقدار یک

نام کلید دو = مقدار دو

[نام بخش دو]

نام کلید یک = مقدار یک

...........................................

برای دسترسی به فایلهای INI ابتدا میابیست کلاس INIAccess را به پروژه تان اضافه کنید.

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
class INIAccess
{
    [DllImport("kernel32.dll")]
    private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
    [DllImport("kernel32.dll")]
    private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
    public void INIWrite(string INIPath, string Section, string Key, string Value)
    {
        WritePrivateProfileString(Section, Key, Value, INIPath);
    }
    public string INIRead(string INIPath, string Section, string Key, string DefualtValue = "")
    {
        StringBuilder temp = new StringBuilder(255);
        int i = GetPrivateProfileString(Section, Key, DefualtValue, temp, 255, INIPath);
        return temp.ToString();
    }
}

برای استفاده از کلاس فوق ، ابتدا باید یک نمونه جدید از این کلاس ایجاد کنید

همون طور که میبینید در این کلاس یک روال و  یک تابع وجود دارد که بصورت عمومی تعریف شده اند و هنگام استفاده قابل دسترسی هستند

روال INIWrite به شما این امکان را میدهد کلیدی را در بخش معین ایجاد ویا مقدار دهی کنید

این روال چهار پارامتر را بعنوان ورودی میگیرد

پارامتر اول نام و مسیر فایل INI ، پارامتر دوم نام بخش ، پارامتر سوم نام کلید و پارامتر چهارم مقدار را که میخواهید به کلید اختصاص دهید

این روال در صورت نبود فایل ، انرا ایجاد میکند و درصورت نبود نام بخش و یا نام کلید آنهارا ایجاد میکند و غیر این صورت مقدار دهی میکند

private void Form1_Load(object sender, EventArgs e)
{

    INIAccess ini = new INIAccess();
    string inifile = Application.StartupPath + "\test.ini";
    ini.INIWrite(inifile, "Setting", "name", "Form1");

}

تابع INIRead میتواند مقداری را از کلید و بخش مشخص بخواند و بعنوان رشته برگرداند

این تابع نیز چهار پارامتر دارد

پارامتر اول نام و مسیر فایل روی هارد ، پارامتر دوم نام بخش و پارامتر سوم نام کلید است پارامتر چهارم نیز اختیار ی است و در صورت نبودن فایل یا بخش یا کلید مورد نظر ، درصورت عدم مقدار دهی ، تهی برمیگرداند ودر صورت مقدار دهی آن مقدار را برمیگرداند

private void Form1_Load(object sender, EventArgs e)
{
    INIAccess ini = new INIAccess() ;
    string inifile = Application.StartupPath + "\test.ini";
    this.Text = ini.INIRead (inifile,"Setting", "name","None");
}

لطفا اگر نظر، پیشنهاد و یا انتقادی در باره مطلب بالا دارید در قسمت زیر و اگر سوالی دارید در بخش پرسش و پاسخ مطرح بفرمایید.

  1. eepersian پاسخ دادن

    awesome tutorial
    Thanks

  2. محمد پاسخ دادن

    با عرض سلام

    اول تشکر میکنم بابت قرار دادن این مطلب

    میخواستم بدونم سرعت خواندن در فایل های INI بیشتر است یا XML چون من میخوام بخش مهمی از تنظیمات ، کانکشن استرینگ و.. در یک فایل ذخیره کنم

    حالا میخوام بدونم سرعت XML بیشتر یا INI

    ممنون میشم پاسخ بدید !