2011-09-15 1 views
1

簡単な設定をiniファイルに保存するためにDevExpress Demoコードの一部を理解し、おそらく再利用しようとしています。私は.NET System.Configurationを使用して、私が望むことをすることができることを知っています。ちょっとしたプロジェクトの場合は、テキストファイルとして保存するだけで、もっと柔軟で軽量に見えます。"[] Server"のようなキーをsortedDictionaryに使うのはなぜですか?

とにかく、私はそれを使って遊んでいる間に、キーを「[] Server」と「[] DBFormat」とキー名として追加しようとしている理由を理解しようとしています。彼らは私がまだ理解できない理由のために、私は多分ここでいくつかの助けを使うことができます。

public class IniFile { 
     SortedDictionary<string, string> data = new SortedDictionary<string, string>(); 
     ... 
     public void Load(string path) { 
      using(StreamReader sr = new StreamReader(path)) { 
       string folder = "[]"; 
       while(!sr.EndOfStream) { 
        string s = sr.ReadLine().Trim(); 
        if(s.Length == 0 || s[0] == ';') continue; 
        if(s[0] == '[') { 
         folder = s; 
         continue; 
        } 
        string key, value; 
        int delim = s.IndexOf('='); 
        if(delim < 0) { 
         key = folder + s.Replace("[", string.Empty).Replace("]", string.Empty); 
         value = string.Empty; 
        } else { 
         key = folder + s.Remove(delim).TrimEnd().Replace("[", string.Empty).Replace("]", string.Empty); 
         value = s.Substring(delim + 1).TrimStart(); 
        } 
        if(!data.ContainsKey(key)) data.Add(key, value); 
        else data[key] = value; 
       } 
      } 
     } 
     ... 
     public void Save(string path) { 
      using(StreamWriter sw = new StreamWriter(path)) { 
       string folder = "[]"; 
       foreach(string key in data.Keys) { 
        int delim = key.IndexOf(']'); 
        string keyFolder = key.Remove(delim + 1); 
        string keyName = key.Substring(delim + 1); 
        if(keyFolder != folder) { 
         folder = keyFolder; 
         sw.WriteLine(folder); 
        } 
        sw.WriteLine(keyName + " = " + data[key]); 
       } 
      } 
     } 

     void AddRawValue(string key, string value) { 
      key = key.Trim(); 
      value = value.Trim(); 
      int folderBegin = key.IndexOf('['); 
      int folderEnd = key.IndexOf(']'); 
      if(folderBegin != 0 || folderEnd < 0) throw new ArgumentException("key"); 
      data.Add(key, value); 
     } 

そしてここでは、iniファイル自体の一部である:

DBFormat = "Mdb" 
Login = "admin" 
Password = "" 
Server = "(localhost)" 

明白な、彼らはのためのキー名に[]を追加して、トラブルかかわら行くここ

は、私は、関連すると思うのコードです何らかの理由がありますが、デモデータでは使用しません。 []内の文字列を使用して設定をグループ化していると思いますか?

+2

わかりません一部のサードパーティのデモコードを使用すると、BCLに組み込まれた設定システムを使用するより簡単で簡単なことに同意します。 –

+0

私はそれが本当に醜いコードだと言わなければならない。 –

+0

このコードの品質に基づいて、理解している時間を無駄にせず、コードサンプルの別のソースを見つけることをお勧めします。 – Rob

答えて

1

私はそれを脱脂、私は意図がそう"[]setting"は、セクションの設定ないを表すことになり"[section]setting"だったかもしれない想像。値を取得するのがいかに簡単かを見てください。ただ1つの文字列だけができます! (「セクション」と「フォルダ」の間に混乱があるようですが、それはそのコードの変数名の上にある可能性があります...)

さらに、私はオフになる可能性がありますそのトリプに約10秒しか投資しなかった>:

ハッピーコーディング。

+0

一部のサークルでは、すべての階層ストレージシステムがそのコンテナ「フォルダ」を呼び出します。おそらく彼らはディレクトリとセクションとハイブとキーとテーブルとをまっすぐに保つのは難しいと感じたからでしょう。 –

+0

元のプログラマーが変数をより良い名前にすることができれば、イメージを推測して、推測ゲームの時間と頭痛を節約できますか? –

関連する問題