2011-06-19 15 views
3

私はここに必要なものに似たものを見つけました。 http://www.codeproject.com/KB/cs/PropertiesSettings.aspx しかし、それは私にとってはあまり効果がありません。ユーザー設定は、C:\documents and settings\[username]\local settings\application data\[your application]などの離れた場所に保存されていますが、これらのフォルダにアクセスすることはできず、あるコンピュータから別のコンピュータに設定ファイルをコピーしたり、ファイルを完全に削除することはできません。また、アプリのすぐ横に設定xmlファイルを持ち、両方をコピー/発送するのが非常に便利です。これは、デモウェア(正当な種類のコーディングタスク)に使用され、現場の技術者ではない人が使用します。私はこれをすばやく行う必要があるので、既存の図書館を再利用し、自分で作成する必要はありません。私はそれを使いやすくて持ち運びができるようにする必要があります。私が最後に望むのは、真夜中に電話をかけることです。設定は、設定した設定ダイアログで編集しても維持されません。読み書き可能なローカルXML設定の使い方は?

したがって、ユーザー設定はどこに保存され、アプリケーション設定は読み取り専用です(実行しない)。私ができることはほかにありますか?私はapp.configファイルは複数の目的を持っていると思う、私は一度それが私の望むように使用されて見たと思う、私はちょうどリンクを見つけることができません。

何かが明確でない場合は教えてください。

+1

設定は通常、次のexcutableに保管されていない二つの理由基本的にあります:1.ユーザーが頻繁にありませんが、実行ファイルのフォルダへの書き込みアクセス(例えば、プログラムファイルの場合)。 2.コンピュータは複数のユーザを持つことができ、それぞれのユーザは自分の設定が必要です。あなたはこれについて確立された大会に反対したいと思うなら、非常に良い理由があるといいでしょう(もしそうなら、システム管理者があなたを憎むことに気づくでしょう)。 – Sven

+0

@スヴェン、私はすでにリストした理由があります。実際には私はアクセスしていないexeに遭遇したことはありませんでしたが、ユーザーの設定 - 私はそれに到達することはできません。 –

答えて

5

あなたの設定を保持するクラスを作成し、それをXMLシリアライズできます

public class Settings 
{ 
    public string Setting1 { get; set; } 
    public int Setting2 { get; set; } 
} 

static void SaveSettings(Settings settings) 
{ 
    var serializer = new XmlSerializer(typeof(Settings)); 
    using (var stream = File.OpenWrite(SettingsFilePath)) 
    { 
     serializer.Serialize(stream, settings); 
    } 
} 

static Settings LoadSettings() 
{ 
    if (!File.Exists(SettingsFilePath)) 
     return new Settings(); 

    var serializer = new XmlSerializer(typeof(Settings)); 
    using (var stream = File.OpenRead(SettingsFilePath)) 
    { 
     return (Settings)serializer.Deserialize(stream); 
    } 
} 
+0

ありがとう、少し詳細を追加できますか? –

+0

@ハミッシュ、編集済みの回答を参照してください。 – svick

+0

ありがとう! 'using'の内部で' var serializer = new XmlSerializer(typeof(Settings)) 'をラップすると無駄でしょうか? 'XmlSerializer'は' IDisposable'を実装していないので、役に立たないであろう@Hamish、 –

関連する問題