4

私は主に C# .NET 4.0 の開発者であり、現在、アプリケーション設定を保存および取得するための過去のアプローチを再考しています。

これまで、タブで区切られたキー/値を持つ単純な「フラット」テキスト ファイルから、階層化された XML ファイル、およびその間のいくつかの方法まで、さまざまな方法を使用してきました。私は過去に組み込みの App.Config/AppSettings クラスを使用したことがありますが (また使用することを検討しています)、このソースから読み込んだデータを保存する組み込みの方法はありません (これを行う際に私が抱えている困難ですが、それは問題のポイントではありません)。

ここでのポイントは、これらの方法にはすべて欠点があり、他の方法よりもうまく機能するものもあれば、他の方法よりも簡単に使用できるものもあり、一貫性があり信頼できるものを特定しようとしているということです.

私の質問は、いくつかの有効な答えがある可能性が高いため、最良の答えを選択することを余儀なくされますが、これは次のとおりです。実行可能ファイルに添付できるファイル、または組み込みのフレームワークでない場合、どの標準をお勧めしますか? XML? 「フラット」ファイル?スタンドアロン データベース?

構成自体はそれほど大きくなく、実際の量のデータはデータベースから (または他のテクノロジを使用して) 読み取られると仮定します。

4

3 に答える 3

2

私はレジストリ ファンであり、自分の設定をそこに置きたいと思っていますが、私の C# アプリでは組み込みの設定を使用しました。そのため、プロジェクト プロパティで負荷とそのデフォルト値を定義し、次のコマンドでそれらにアクセスできます。

Properties.Settings.Default.<settingname>

それらも設定できるので、Properties.Settings.Default.HideDisabled = true;

そして、あなたはそれらを保存することができます

Properties.Settings.Default.Save();

私はこれに問題はありませんでしたが、あなたが言ったように、すべてに長所と短所があります.

于 2012-08-22T07:24:05.740 に答える
1

さらに別の方法 (kernel32) では、C# 4.0 でさえも C# についてはそれほど重要ではありませんが、バリアントのリストを開始したので、ここで有効である必要があります。

namespace Ini {
    public class IniFile {
        private string path;
        [DllImport("kernel32")]
        private static extern long WritePrivateProfileString(string section,
            string key, string val, string filePath);
        [DllImport("kernel32")]
        private static extern int GetPrivateProfileString(string section,
                    string key, string def, StringBuilder retVal,
            int size, string filePath);
        public IniFile(string INIPath) {
            path = INIPath;
            }
        public void IniWriteValue(string Section, string Key, string Value) {
            WritePrivateProfileString(Section, Key, Value, this.path);
            }
        public string IniReadValue(string Section, string Key) {
            StringBuilder temp = new StringBuilder(255);
            int i = GetPrivateProfileString(Section, Key, "", temp,
                                            255, this.path);
            return temp.ToString();
            }
        }
    }
于 2012-08-22T07:28:17.377 に答える
1

私が取り組んできたいくつかのアプリケーションにはローカル データベースが含まれており、そのデータベース ファイルを使用して設定も保持していました。それは機能しますが、何かがおかしいと感じるだけで、アプリケーションが実行されていないときに設定を変更できるようにしたい場合は問題になる可能性があります. (クラッシュなどを回避するため。)

Environment.SpecialFolder.ApplicationDataほとんどの場合、フォルダーに保存されている XML ファイルを使用し、 DataContractSerializer. バージョン管理を行うことができますが、最も重要なことは、設定オブジェクトの特定のプロパティが新しいか存在しない場合に、XML ファイルを読み込んで保存できることです。アプリケーションがクラッシュすることはありません。設定を再度保存すると、最新バージョンが保存されます。クリーンで意地悪でシンプルだと思います。

于 2012-08-22T07:28:59.340 に答える