LoginSignup
6
8

More than 3 years have passed since last update.

C#でユーザーの設定内容を保存する

Last updated at Posted at 2019-10-26

環境:Windows7以上であれば、インストール不要で使えます。
・Windows10
・コンパイラ C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe

やれること

image.png
のテキストを編集して、ウィンドウを閉じると、次回起動時に、編集されたテキストをロードできる。
image.png

ソースコード

このサンプルコードでは、起動時に読み込んで、閉じられるときに保存しているが、
ボタンなどのユーザー操作起点で読み込み・保存させることも可能。(参考サイト参照)

UserTest.cs

using System;
using System.Windows.Forms;
using System.Configuration;


namespace Kob58im
{
    public class MySetting : ApplicationSettingsBase
    {
        [UserScopedSetting()]
        [DefaultSettingValue("hoge")]
        public string Message
        {
            get { return (string)this["Message"]; }
            set { this["Message"] = value; }
        }
    }


    class UserTestClass : Form
    {
        TextBox txt;
        MySetting appSettings;

        UserTestClass()
        {
            appSettings = new MySetting();

            txt = new TextBox();
            Controls.Add(txt);

            LoadSettings();
            Closing += (sender,e)=>{SaveSettings();};
        }

        void LoadSettings()
        {
            txt.Text = (string)appSettings.Message;
        }

        void SaveSettings()
        {
            appSettings.Message = txt.Text;
            appSettings.Save();
        }

        [STAThread]
        static void Main()
        {
            Application.Run(new UserTestClass());

            // どこに設定ファイルが保存されたかを出力
            Console.WriteLine("Configuration path:");
            Configuration config =
                ConfigurationManager.OpenExeConfiguration(
                ConfigurationUserLevel.PerUserRoamingAndLocal);
            Console.WriteLine(config.FilePath);

        }
    }
}

設定ファイルはどこに保存されるか?

C:\Users\【ユーザー名】\AppData\Local\Kob58im\UserTest.exe_Url_xxxxxxxxxxxx\0.0.0.0\user.config

に保存された。下記のような感じ。

保存されたファイルの中身

user.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=XXXXXXXXXXXXXXXX" >
            <section name="Kob58im.MySetting" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=XXXXXXXXXXXXXXXX" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <Kob58im.MySetting>
            <setting name="Message" serializeAs="String">
                <value>hogePiyo</value>
            </setting>
        </Kob58im.MySetting>
    </userSettings>
</configuration>

  • 名前空間を含むクラス名Kob58im.MySettingが含まれており、設定用のクラス毎にバッティングしないようになっている。
  • .Netの提供してくれるクラスSystem.Configuration.ClientSettingsSectionのバージョン4.0.0.0が含まれている。(.Netの環境を変えるとデータの読み書きができない可能性あり。)

参考サイト

下記がかなり詳しい。
https://dobon.net/vb/dotnet/programing/applicationsettingsbase.html

参考サイト - iniファイルを読む込む方法

iniファイルはあまり推奨されていない気がしますが、ユーザーが編集するならxmlよりiniのほうが楽かなということで紹介。

文字コードも考慮されています。
http://tech.hikware.com/article/20170817a.html

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8