1

で正常に動作しますがRead、うまくいかないようですWrite。ファイルを書き込もうとしてもIO例外はスローされません。何も起こらなかったかのように。

これが私のコードです。GetValue()SetValue()関数を見てください。

using System.Configuration;

public class AppConfig {
    private string _username;
    private string _password; 

    public AppConfig() {
        _filePath = GetValue("Username");
        _password = GetValue("Password");
        //... more
    }
    public string Password {
        get { return _password; }
        set { SetValue("Password", value); _password = value; }
    }
    public string Username {
        get { return _username; }
        set { SetValue("Username", value); _username = value; }
    }
    private void SetValue(string key, string val) {
        var cfg= ConfigurationManager
                .OpenExeConfiguration(ConfigurationUserLevel.None);
        cfg.AppSettings.Settings[key].Value = val;
        cfg.Save(ConfigurationSaveMode.Modified);
        ConfigurationManager.RefreshSection("appSettings");
    }
    private string GetValue(string key) {
        return ConfigurationManager.AppSettings[key];
    }
}

そしてこれはapp.configファイルです:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>

    <add key ="Password" value ="123456"/>
    <add key ="Username" value ="hohoho"/>

  </appSettings>
</configuration>

どうやってそれを実現するか考えていますWriteか?ありがとうございました。

4

2 に答える 2

2

.Net の構成システムは、アセンブリ フォルダーの app.config への変更をプログラムで保存できるように設計されていません。そこに「保存」メソッドがあることは知っていますが、これらの変更は実際には構成ファイルのコピーに保存されます。コピーの場所は、設定の範囲によって異なります。

次のようなアプリケーション設定:

<appSettings>
     <add key="" value=""/>
</appSettings>

私が正しく思い出せば、「適用範囲」があります。プロジェクト設定ページの [設定] ページを使用するか、[Settings.settingsプロパティ] フォルダーで開くと、スコープ (ユーザーまたはアプリケーション) を選択できます。

このようにして、設定への変更は、現在のユーザーまたはその特定のバージョンのアプリケーションに対して保持されます。これらのコピーは、適切なアカウントの %APPDATA% のどこかに生成されたフォルダーに保存されます。構成システムは、ログインしているユーザーに応じて、設定を自動的に再度読み込みます。

これが、「アップグレード」メソッドもある理由です。アプリケーションの新しいバージョンに設定を追加し、ユーザーの設定をアップグレードして、新しいプロパティのみがユーザーのコピーに追加されるようにすることができます。このように、アセンブリ フォルダー内の app.config 内の設定は、設定の既定値にすぎません。

上記のコメントは、なぜこれが機能するのかについて触れています。Program Files 内のファイルは、インストール後もそのままにしておくことが意図されており、UAC はこれを保証します。

構成システムを読むことをお勧めします。これは非常に強力です。それでも本当に app.config を変更したい場合は、カスタム コードを記述して app.config ファイルを直接変更する必要があります

  • ユーザーのプロファイル フォルダにインストールする、または
  • 常に管理者としてプログラムを実行する
于 2012-12-20T08:46:29.203 に答える
0

次のコードを試してください

 Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        config.AppSettings.Settings[key].Value = value;
        config.Save();
        ConfigurationManager.RefreshSection("appSettings");
于 2016-03-04T21:31:43.697 に答える