کار با فایل ini در سی شارپ به کمک کتابخانه ini-parser
INI File Parser + سورس کد اصلی + DLL
قبلا در «این لینک»، به یک روش ساده جهت کار با فایلهای ini در سیشارپ پرداختیم؛ اما آن روش هم ساده بود و هم اینکه بهینه، اصولی و بدون خطا طراحی نشده بود. بنابراین امروز قصد دارم تا از یک کتابخانهای به نام ini-parser، برای پردازش فایل ini استفاده کنیم.
این کتابخانه، برای .NET، مونو (Mono) و یونیتی (Unity) که از سی شارپ پشتیبانی میکنند، طراحی شده است؛ و به شما کمک میکند تا بتوانید فایلی با ساختار ini را خوانده و یا محتوای آن را ویرایش کنید؛ و البته بتوانید یک فایل ini جدید بسازید.
این کتابخانه به طور 100% با دات نت فریمورک نوشته شده است و از API ویندوز در آن هیچ استفادهای نشده؛ بنابراین در هر محیط دات نتی نیز قابل پیادهسازی میباشد.
نصب و راه اندازی
در محیط ویژوال استودیو و پروژهی خود، از منوی Tools، وارد NuGet Package Manager شده و روی Package Manager Console کلیک کنید. دستور زیر را تایپ کرده و Enter را بزنید تا کتابخانه نصب شود:
Install-Package ini-parser
همچنین میتوانید فایل dll آن را نیز از انتهای مطلب دریافت کنید.
روش استفاده
خواندن یک فایل ini
FileIniDataParser parser = new FileIniDataParser(); IniData data = parser.ReadFile("Configuration.ini");
گرفتن یک کلید از یک بخش
string useFullScreenStr = data["UI"]["fullscreen"]; bool useFullScreen = bool.Parse(useFullScreenStr);
در کد بالا که از IniData همانند یک آرایه دوبعدی استفاده کرده است. UI به Section یا بخش مورد نظر در ساختار فایل ini اشاره داشته و fullscreen نیز به کلید موجود در آن بخش. همچنین مقدار خانه یا کلید نیز همواره رشته خواهد بود؛ ولی ممکن است در آن عدد یا بولین و … باشد و میتوان در ادامهی کد، آن را به مقدار مورد نظر تبدیل کرد.
تغییر یک مقدار (یا اضافه کردن)
data["UI"]["fullscreen"] = "true"; parser.WriteFile("Configuration.ini", data);
فهمیدن این کد نیز با توجه به کد قبلی سادهتر است. ابتدا کلید مورد نظر را در data تغییر داده و سپس از تابع WriteFile مربوط به آبجکت parser؛ جهت ذخیرهی آن استفاده میشود. (یعنی اطلاعاتِ ویرایش شده را روی فایل مینویسد)
ترکیب دو فایل ini
var parser = new IniParser.Parser.IniDataParser(); IniData config = parser.Parse(File.ReadAllText("global_config.ini")); IniData user_config = parser.Parse(File.ReadAllText("user_config.ini")); config.Merge(user_config);
در اینجا، فایل اول با دومی ترکیب شده است؛ بنابراین اگر موارد تکراری وجود داشته باشند، اولویت با فایل دومی است. به عبارتی در کد بالا، فایل دومی را روی فایل اولی ریختهایم.
البته میتوان فقط یک بخشی را ترکیب کرد:
config["user_settings"].Merge(user_config["user_settings"]);
کار با کامنتها
همانطور که میدانید، فایل ini میتواند شامل کامنت نیز باشد:
var listOfCommentsForSection = config.["user_settings"].Comments; var listOfCommentsForKey = config["user_settings"].GetKeyData("resolution").Comments;
به صورت بالا، میتوان به کامنتهای مربوط به هر بخش یا هر کلیدی دسترسی داشت.
نظرات ثبت شده بدون دیدگاه