C# 将数据保存并加载到xml

C# 将数据保存并加载到xml,c#,xml,C#,Xml,所以我正在用注册表格做一个登录应用程序,但我需要一些帮助。我想用xml保存所有帐户信息,这是我可以做到的,我创建了一个表单,在这里我可以使用savefiledialog保存并加载1个用户到xml,下面是代码: xml类: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using

所以我正在用注册表格做一个登录应用程序,但我需要一些帮助。我想用xml保存所有帐户信息,这是我可以做到的,我创建了一个表单,在这里我可以使用savefiledialog保存并加载1个用户到xml,下面是代码:

xml类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Xml.Serialization;

namespace Login_Form
{
    public class xmlSave
    {
        public static void SaveData(object IClass, string filename)
        {
            StreamWriter writer = null;
            try
            {
                XmlSerializer xml = new XmlSerializer((IClass.GetType()));
                writer = new StreamWriter(filename);
                xml.Serialize(writer, IClass);
            }
            finally
            {
                if (writer != null)
                    writer.Close();
                writer = null;
            }
        }
    }

    public class xmlLoad<T>
    {
        public static Type type;

        public xmlLoad()
        {
            type = typeof(T);
        }

        public T LoadData(string filename)
        {
            T result;
            XmlSerializer xml = new XmlSerializer(type);
            FileStream fs = new FileStream(filename, FileMode.Open,     FileAccess.Read, FileShare.Read);
            result = (T)xml.Deserialize(fs);
            fs.Close();
            return result;
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.IO;
使用System.Xml.Serialization;
名称空间登录表单
{
公共类xmlSave
{
公共静态void SaveData(对象类,字符串文件名)
{
StreamWriter=null;
尝试
{
XmlSerializer xml=新的XmlSerializer((IClass.GetType());
writer=新的StreamWriter(文件名);
Serialize(writer,IClass);
}
最后
{
if(writer!=null)
writer.Close();
writer=null;
}
}
}
公共类xmlLoad
{
公共静态类型;
公共xmlLoad()
{
类型=类型(T);
}
公共T加载数据(字符串文件名)
{
T结果;
XmlSerializer xml=新的XmlSerializer(类型);
FileStream fs=newfilestream(文件名,FileMode.Open,FileAccess.Read,FileShare.Read);
result=(T)xml.Deserialize(fs);
fs.Close();
返回结果;
}
}
}
下面是保存和加载代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Xml.Serialization;

namespace Login_Form    
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            saveFileDialog.InitialDirectory =     @"C:\Users\Felix\Documents\visual studio 2013\Projects\Login Form\Login     Form\bin\Debug";
            saveFileDialog.Filter = "xml Files (*.xml)|*.xml";
            saveFileDialog.FilterIndex = 2;
            saveFileDialog.RestoreDirectory = true;

            if(saveFileDialog.ShowDialog() == DialogResult.OK)
            {
                User user = new User();
                user.FName = textBox1.Text;
                user.LName = textBox2.Text;
                user.Username = textBox3.Text;
                user.Email = textBox4.Text;
                user.Password = textBox5.Text;
                xmlSave.SaveData(user, saveFileDialog.FileName);
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            User user = new User();
            xmlLoad<User> loadUser = new xmlLoad<User>();

            user = loadUser.LoadData("test.xml");
            textBox1.Text = user.FName;
            textBox2.Text = user.LName;
            textBox3.Text = user.Username;
            textBox4.Text = user.Email;
            textBox5.Text = user.Password;    
        }
    }

    public class User
    {
        private string fName;
        private string lName;
        private string username;
        private string email;
        private string password;

        public string FName
        {
            get { return fName; }
            set { fName = value; }
        }

        public string LName
        {
            get { return lName; }
            set { lName = value; }
        }

        public string Username
        {
            get { return username; }
            set { username = value; }
        }

        public string Email
        {
            get { return email; }
            set { email = value; }
        }

       public string Password
        {
            get { return password; }
            set { password = value; }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Windows.Forms;
使用System.IO;
使用System.Xml.Serialization;
名称空间登录表单
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
saveFileDialog.InitialDirectory=@“C:\Users\Felix\Documents\visual studio 2013\Projects\Login Form\Login Form\bin\Debug”;
saveFileDialog.Filter=“xml文件(*.xml)|*.xml”;
saveFileDialog.FilterIndex=2;
saveFileDialog.RestoreDirectory=true;
if(saveFileDialog.ShowDialog()==DialogResult.OK)
{
用户=新用户();
user.FName=textBox1.Text;
user.LName=textBox2.Text;
user.Username=textBox3.Text;
user.Email=textBox4.Text;
user.Password=textBox5.Text;
SaveData(用户,saveFileDialog.FileName);
}
}
私有void Form1\u加载(对象发送方、事件参数e)
{
用户=新用户();
XmlLoadUser=新的xmlLoad();
user=loadUser.LoadData(“test.xml”);
textBox1.Text=user.FName;
textBox2.Text=user.LName;
textBox3.Text=user.Username;
textBox4.Text=user.Email;
textBox5.Text=user.Password;
}
}
公共类用户
{
私有字符串fName;
私有字符串名称;
私有字符串用户名;
私人字符串电子邮件;
私有字符串密码;
公共字符串FName
{
获取{return fName;}
设置{fName=value;}
}
公共字符串名称
{
获取{return lName;}
设置{lName=value;}
}
公共字符串用户名
{
获取{返回用户名;}
设置{username=value;}
}
公共字符串电子邮件
{
获取{返回电子邮件;}
设置{email=value;}
}
公共字符串密码
{
获取{返回密码;}
设置{password=value;}
}
}
}

这允许我将5个文本框中的信息保存到xml文件中,但只有1个用户,我想知道如何保存多个用户,以及如何将其用作登录系统(无服务器,目前仅本地),以及如何在主应用程序中加载正确的信息,例如,如果im登录到用户1,我希望显示用户信息,并与其他用户相同。如果我解释得不好,我很抱歉。

如果您不需要复杂的数据库,我认为使用数据库的最佳方式是,SQLite非常适合您


我的建议是,如果你想用xml存储数据,你必须保存整个UserList,或者你可以将xml文件保存到users temp文件夹Path.GetTempPath(),但是只有当用户使用不同的Windows用户登录时,它才起作用。

如上所述,最好的方法是使用SQL或至少将所有用户存储在一个xml文件中。但是,如果您确实需要将所有用户信息存储在单独的文件中,您可以仅为用户信息文件创建一些目录,并且每次登录或获取一些用户信息时,您应该迭代抛出所有文件并反序列化每个文件

诸如此类:

string[] files = Directory.GetFiles('your user storage directory'); 
foreach (string file in files) { 
  user = loadUser.loadData(file);
  //your logic goes here
}

您的答案。
我已将用户信息保存在xml中,并加载到表单加载中。
将文件名另存为test.xml时


如果您希望将所有数据放在一个XML文件中,您可能会发现将每个用户放在DataTable的一行中并使用该行读取和写入XML文件更容易:请阅读关于发布代码的指南。当一两个属性/文本框/任何东西出现问题时,绝对没有理由让示例包含大量属性/文本框/任何东西。在示例代码中也使用自动属性(
publicstringname{get;set}
),因为它更紧凑(没有人关心您的编码标准,因为某些原因可能需要完整版本的属性)。
using System;
using System.IO;
using System.Reflection;
using System.Windows.Forms;
using System.Xml;

namespace Login_Form
{
    public partial class Form1 : Form
    {
        SaveFileDialog saveFileDialog = new SaveFileDialog();
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            saveFileDialog.InitialDirectory = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            saveFileDialog.Filter = "xml Files (*.xml)|*.xml";
            saveFileDialog.FilterIndex = 2;
            saveFileDialog.RestoreDirectory = true;

            if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
                if (File.Exists(saveFileDialog.FileName))
                    File.Delete(saveFileDialog.FileName);

                User user = new User();
                user.FName = textBox1.Text;
                user.LName = textBox2.Text;
                user.Username = textBox3.Text;
                user.Email = textBox4.Text;
                user.Password = textBox5.Text;

                XmlWriter xmlWriter = XmlWriter.Create(saveFileDialog.FileName);
                xmlWriter.WriteStartDocument();
                xmlWriter.WriteStartElement("UserInfo");

                xmlWriter.WriteStartElement("FName");
                xmlWriter.WriteString(user.FName);
                xmlWriter.WriteEndElement();

                xmlWriter.WriteStartElement("LName");
                xmlWriter.WriteString(user.LName);
                xmlWriter.WriteEndElement();

                xmlWriter.WriteStartElement("Username");
                xmlWriter.WriteString(user.Username);
                xmlWriter.WriteEndElement();

                xmlWriter.WriteStartElement("Email");
                xmlWriter.WriteString(user.Email);
                xmlWriter.WriteEndElement();

                xmlWriter.WriteStartElement("Password");
                xmlWriter.WriteString(user.Password);
                xmlWriter.WriteEndElement();

                xmlWriter.WriteEndElement();
                xmlWriter.WriteEndDocument();
                xmlWriter.Close();
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            User user = new User();
            string filePath = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            filePath += "\\test.xml";
            if (File.Exists(filePath))
            {
                XmlDocument doc = new XmlDocument();

                doc.Load(filePath);
                XmlNode VersionNode = null;
                VersionNode = doc.SelectSingleNode("UserInfo");
                if (null == VersionNode) return;
                user.FName = VersionNode.SelectSingleNode("FName").InnerText;
                user.LName = VersionNode.SelectSingleNode("LName").InnerText;
                user.Username = VersionNode.SelectSingleNode("Username").InnerText;
                user.Email = VersionNode.SelectSingleNode("Email").InnerText;
                user.Password = VersionNode.SelectSingleNode("Password").InnerText;

                textBox1.Text = user.FName;
                textBox2.Text = user.LName;
                textBox3.Text = user.Username;
                textBox4.Text = user.Email;
                textBox5.Text = user.Password;
            }
        }
    }

    public class User
    {
        private string fName;
        private string lName;
        private string username;
        private string email;
        private string password;

        public string FName
        {
            get { return fName; }
            set { fName = value; }
        }

        public string LName
        {
            get { return lName; }
            set { lName = value; }
        }

        public string Username
        {
            get { return username; }
            set { username = value; }
        }

        public string Email
        {
            get { return email; }
            set { email = value; }
        }

        public string Password
        {
            get { return password; }
            set { password = value; }
        }
    }
}