using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Diagnostics; namespace FDK { /// /// 汎用的な .iniファイルを扱う。 /// public class CIniFile { // プロパティ public string strファイル名 { get; private set; } public List Sections { get; set; } public class CSection { public string strセクション名 = ""; public List> listパラメータリスト = new List>(); } // コンストラクタ public CIniFile() { this.strファイル名 = ""; this.Sections = new List(); } public CIniFile( string strファイル名 ) :this() { this.t読み込み( strファイル名 ); } // メソッド public void t読み込み( string strファイル名 ) { this.strファイル名 = strファイル名; StreamReader sr = null; CSection section = null; try { sr = new StreamReader( this.strファイル名, Encoding.GetEncoding("Shift_JIS") ); // ファイルが存在しない場合は例外発生。 string line; while( ( line = sr.ReadLine() ) != null ) { line = line.Replace( '\t', ' ' ).TrimStart( new char[] { '\t', ' ' } ); if( string.IsNullOrEmpty( line ) || line[ 0 ] == ';' ) // ';'以降はコメントとして無視 continue; if( line[ 0 ] == '[' ) { #region [ セクションの変更 ] //----------------------------- var builder = new StringBuilder( 32 ); int num = 1; while( ( num < line.Length ) && ( line[ num ] != ']' ) ) builder.Append( line[ num++ ] ); // 変数 section が使用中の場合は、List に追加して新しい section を作成する。 if( section != null ) this.Sections.Add( section ); section = new CSection(); section.strセクション名 = builder.ToString(); //----------------------------- #endregion continue; } string[] strArray = line.Split( new char[] { '=' } ); if( strArray.Length != 2 ) continue; string key = strArray[ 0 ].Trim(); string value = strArray[ 1 ].Trim(); if( section != null && !string.IsNullOrEmpty( key ) && !string.IsNullOrEmpty( value ) ) section.listパラメータリスト.Add( new KeyValuePair( key, value ) ); } if( section != null ) this.Sections.Add( section ); } finally { if( sr != null ) sr.Close(); } } public void t書き出し( string strファイル名 ) { this.strファイル名 = strファイル名; this.t書き出し(); } public void t書き出し() { StreamWriter sw = null; try { sw = new StreamWriter( this.strファイル名, false, Encoding.GetEncoding( "Shift_JIS" ) ); // オープン失敗の場合は例外発生。 foreach( CSection section in this.Sections ) { sw.WriteLine( "[{0}]", section.strセクション名 ); foreach( KeyValuePair kvp in section.listパラメータリスト ) sw.WriteLine( "{0}={1}", kvp.Key, kvp.Value ); } } finally { if( sw != null ) sw.Close(); } } } }