C# 将数据保存并加载到xml
所以我正在用注册表格做一个登录应用程序,但我需要一些帮助。我想用xml保存所有帐户信息,这是我可以做到的,我创建了一个表单,在这里我可以使用savefiledialog保存并加载1个用户到xml,下面是代码: 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
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; }
}
}
}