winforms 如何通过winform更新保存持久数据?

x6h2sr28  于 2023-06-24  发布在  其他
关注(0)|答案(1)|浏览(237)

我有一个程序,创建一个配置文件和帖子到社会媒体,因此我有一个API密钥和访问令牌的集合为每个配置文件。
我已经保存了一些到默认的properties.settings,但是在运行之前有一个未知数量的配置文件,每个配置文件都需要自己的设置文件。我已经保存了一些XML文件,但在更新过程中被覆盖。
如何保存数据,使其不会在更新过程中被覆盖?

yi0zb3m4

yi0zb3m41#

1.使用数据库是一个很好的做法。
1.如果更改了要启动的文件的位置,则将不会使用旧的配置文件,这意味着在将应用程序返回到初始保存位置之前,所有设置都将不可用。
1.如果不使用数据库保存令牌对您来说是基本的,那么您可以使用INI文件(下面的示例)或使用Newtonsoft.Json以JSON格式保存数据(这比INI更好)。
在INI文件的例子中,我使用了Hopes.MultiConfX包,保存,更新和接收令牌工作(包中也有删除)。可视化在截图下面的代码。

using System;
using System.IO;
using System.Windows.Forms;

using Hopex.MultiConfX.Ini;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        readonly Ini iniHandler = new Ini("tokens");

        public Form1()
        {
            InitializeComponent();

            iniHandler.Load();
            cb_users.Items.AddRange(items: iniHandler.Data.GetSections().ToArray());
        }

        private void btn_add_Click(object sender, EventArgs e)
        {
            if (
                !string.IsNullOrWhiteSpace(value: tb_new_user.Text) &&
                !string.IsNullOrWhiteSpace(value: tb_new_social_network.Text) &&
                !string.IsNullOrWhiteSpace(value: tb_new_token.Text)
            )
            {
                iniHandler.Data.AddItem(
                    section: tb_new_user.Text,
                    key: tb_new_social_network.Text,
                    value: tb_new_token.Text
                );

                if (iniHandler.Save())
                {
                    cb_users.Items.Clear();
                    cb_social_networks.Items.Clear();
                    tb_token.Text = string.Empty;

                    cb_users.Items.AddRange(items: iniHandler.Data.GetSections().ToArray());

                    MessageBox.Show(text: "Success");
                }
                else
                    MessageBox.Show(text: "Failure");
            }
        }

        private void cb_users_SelectedIndexChanged(object sender, EventArgs e)
        {
            cb_social_networks.Items.Clear();
            cb_social_networks.Items.AddRange(
                items: iniHandler.Data.GetKeys(
                    section: ((ComboBox)sender).SelectedItem.ToString()
                ).ToArray()
            );
        }

        private void cb_social_networks_SelectedIndexChanged(object sender, EventArgs e)
        {
            tb_token.Text = iniHandler.Data.GetValue(
                section: cb_users.SelectedItem.ToString(),
                key: ((ComboBox)sender).SelectedItem.ToString()
            );
        }
    }
}

相关问题