c# ( dotnetcore ) で Microsoft.Extensions.Configuration.Iniを利用して iniファイルを読み込む
The Art of UNIX Programming (アスキードワンゴ)の第5章にある、「テキスト形式 :優れたプロトコルが優れた実践を生む」> 「5.2データファイルメタフォーマツト」>「5.2.6 WindowsINIフォーマット」(P.151)をC#でも読み込みたい。
MacではWin32APIは使えない。
昔々、iniファイルの読み込みは、win32APIにある、「GetPrivateProfileString」を利用して読み込まれることが多かったようです。
しかしwin32APIは、macじゃ利用できない。
でどうするかを調べた。
Microsoft.Extensions.Configuration.Ini をインストール
NuGetでMicrosoft.Extensions.Configuration.Iniをインストールします。iniで検索したら出てきました。
iniファイル作成
example.ini というファイル名でファイルを作成
;コメント [section1] name = "test1" ;コメント [section2] name = test2
出力ディレクトリにコピーするよう設定
プロジェクトにiniファイルを追加したので、出力ディレクトリにコピーをしておこう。
そうすれば、コンパイル結果にiniファイルも出力される
iniファイルを読み込むプログラム
using System; using Microsoft.Extensions.Configuration; namespace example_console_app { class Program { static void Main(string[] args) { //iniファイルを読み込む var ini = new ConfigurationBuilder() .SetBasePath(System.IO.Directory.GetCurrentDirectory()) .AddIniFile("example.ini").Build(); //iniファイルの内容を出力 Console.WriteLine(ini["section1:name"]); Console.WriteLine(ini["section2:name"]); } } }
出力結果
test1 test2
iniファイルがなかったらどうなるか
System.IO.FileNotFoundExceptionをthrowしました。
try~catchを追記して内容を確認
using System; using Microsoft.Extensions.Configuration; namespace example_console_app { class Program { static void Main(string[] args) { try { //iniファイルを読み込む var ini = new ConfigurationBuilder() .SetBasePath(System.IO.Directory.GetCurrentDirectory()) .AddIniFile("example2.ini").Build(); //iniファイルの内容を出力 Console.WriteLine(ini["section1:name"]); Console.WriteLine(ini["section2:name"]); } catch (System.IO.FileNotFoundException e) { Console.WriteLine(e.Message); } } } }
e.Messageの内容
The configuration file 'example2.ini' was not found and is not optional. The physical path is '/Users/mitsugi/Projects/example-console-app/example-console-app/bin/Debug/netcoreapp3.1/example2.ini'.
iniファイルが壊れていたらどうなるか
iniファイルを以下のように修正して確認(section2の閉じる]を消した)
;コメント [section1] name = "test1" ;コメント [section2 name = test2
実行してみると、System.FormatExceptionをthrowしました。
try~catchを追記して内容を確認
using System; using Microsoft.Extensions.Configuration; namespace example_console_app { class Program { static void Main(string[] args) { try { //iniファイルを読み込む var ini = new ConfigurationBuilder() .SetBasePath(System.IO.Directory.GetCurrentDirectory()) .AddIniFile("example.ini").Build(); //iniファイルの内容を出力 Console.WriteLine(ini["section1:name"]); Console.WriteLine(ini["section2:name"]); } catch (System.IO.FileNotFoundException e) { Console.WriteLine(e.Message); } catch (System.FormatException e) { Console.WriteLine(e.Message); } } } }
e.Messageの内容
Unrecognized line format: '[section2'.
参考書籍
The Art of UNIX Programming (アスキードワンゴ)
- 作者:Eric S.Raymond,長尾 高弘
- 発売日: 2019/03/26
- メディア: Kindle版