时间:2021-05-02
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Xml; //重要using System.IO;// 本程序将演练XML文挡的读与写// 也就是XMLReader和XMLWriternamespace test11{public partial class Form1 : Form{public Form1(){InitializeComponent();FlueList();}// 刷新显示ListBox显示的内容private void FlueList(){try{listBox1.Items.Clear();FileStream fs = new FileStream("myTestXML.xml", FileMode.Open);XmlReader tr = XmlReader.Create(fs);while (!tr.EOF){if (tr.MoveToContent() == XmlNodeType.Element && tr.Name == "Username"){listBox1.Items.Add(tr.ReadElementString());}tr.Read();}fs.Close();tr.Close();}catch{// 导入时遇到无法导入数据,则文件出错,将提示用户删除文件并建立新文件信息。MessageBox.Show("文挡不可用,无法导入!", "错误");if (MessageBox.Show("是否建立新的用户文挡?\n此操作将删除以前所有用户数据", "程序提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK){// 建立新文件,此用一个无参数函数重载。CreateNewFile();}}}private void button1_Click(object sender, EventArgs e){string username = textBox1.Text;string password = textBox2.Text;// 需要检查用户名和密码同时不能为空,并且不能和记录相重复。if (username != "" && password != "" && checkReport(username, password)){try{XmlDocument doc = new XmlDocument();doc.Load("myTestXML.xml");XmlElement User = doc.CreateElement("User");User.SetAttribute("UserSettig", "Customer");// 创建一个Username标签XmlElement newUsername = doc.CreateElement("Username");newUsername.InnerText = username;User.AppendChild(newUsername);// 创建一个Password标签XmlElement newPassword = doc.CreateElement("Password");newPassword.InnerText = password;User.AppendChild(newPassword);doc.DocumentElement.AppendChild(User);// 将以上信息写入到xml文件。XmlTextWriter tr = new XmlTextWriter("myTestXML.xml", null);tr.Formatting = Formatting.Indented;doc.WriteContentTo(tr);tr.Close();MessageBox.Show("写入成功!", "成功");FlueList();// 以上条件通过后,方可进行写入操作。// 此方法是将XML文挡重写,记录全无,因此舍弃此方法。// 此方法在后面用于错误处理,建立新文件时。}catch{CreateNewFile(username, password);}}else{MessageBox.Show("请确定输入是否正确或有重名和密码重复", "请检查");}}// 如果文件读写出错,则删除建立一个新文件。// 此函数有一个无参数的函数重载。// 好象这个有参数的函数也没什么用处。唉……不知道当初怎么想的。private void CreateNewFile(string username, string password){XmlWriterSettings settings = new XmlWriterSettings();settings.Indent = true;settings.NewLineOnAttributes = true;XmlWriter thisWriter = XmlWriter.Create("myTestXML.xml", settings);// 首行的声明thisWriter.WriteStartDocument();// 开始输入内容到文件中thisWriter.WriteStartElement("UserList");thisWriter.WriteStartElement("User");thisWriter.WriteAttributeString("UserSetting", "Customer");thisWriter.WriteElementString("Username", username);thisWriter.WriteElementString("Password", password);thisWriter.WriteEndElement();thisWriter.WriteEndElement();thisWriter.WriteEndDocument();thisWriter.Flush();thisWriter.Close();MessageBox.Show("写入成功!", "成功");}// 上面创建新文件的函数的无参数重载部分。private void CreateNewFile(){try{// 如果文件存在则删除该文件,建立正确的新文件。if (File.Exists("myTestXML.xml")){File.Delete("myTestXML.xml");}XmlWriterSettings settings = new XmlWriterSettings();settings.Indent = true;settings.NewLineOnAttributes = true;XmlWriter thisWriter = XmlWriter.Create("myTestXML.xml", settings);// 首行的声明thisWriter.WriteStartDocument();// 开始输入内容到文件中thisWriter.WriteStartElement("UserList");thisWriter.WriteEndElement();thisWriter.WriteEndDocument();thisWriter.Flush();thisWriter.Close();}catch{MessageBox.Show("建立新文挡失败!\n请检查文件 myTestXML.xml 是否只读!", "程序错误");}}// 检查是否有重复的用户名和密码,此函数返回一个Bool值private bool checkReport(string username, string password){try{FileStream fs = new FileStream("myTestXML.xml", FileMode.Open);XmlReader tr = XmlReader.Create(fs);string thisusername = "", thispassword = "";while (!tr.EOF){if (tr.MoveToContent() == XmlNodeType.Element && tr.Name == "Username"){thisusername = tr.ReadElementString();}else if (tr.MoveToContent() == XmlNodeType.Element && tr.Name == "Password"){thispassword = tr.ReadElementString();}if (thisusername == username && thispassword == password){tr.Close();fs.Close();return false;}tr.Read();}fs.Close();tr.Close();return true;}catch{// 错误处理,如果文挡不存在,或者文挡错误,将删除文挡,并从新建立。MessageBox.Show("文挡不可用,无法查询!", "错误");if (MessageBox.Show("是否建立新的用户文挡?\n此操作将删除以前所有用户数据", "程序提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK){// 调用无参数函数重载版本建立新文件。CreateNewFile();}return true;}}// 检查用户名和密码是否可用的函数。private void button2_Click(object sender, EventArgs e){if (textBox1.Text != "" && textBox2.Text != "" && checkReport(textBox1.Text, textBox2.Text)){MessageBox.Show("此用户名和密码可以用", "通过");}else{MessageBox.Show("此用户名和密码不可用", "未通过");}}// 退出该程序。private void button3_Click(object sender, EventArgs e){Application.Exit();}private void Form1_Load(object sender, EventArgs e){}}}
本文源自:翔宇亭——IT乐园(http://),转载请保留此信息!声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了C#通过DataSet读写xml文件的方法。分享给大家供大家参考。具体实现方法如下:DataSetds=newDataSet();//读取Xml文
通常C#使用基于XML的配置文件,不过如果有需要的话,比如要兼顾较老的系统,可能还是要用到INI文件。但C#本身并不具备读写INI文件的API,只有通过调用非托
C#FileStream类在C#语言中文件读写流使用FileStream类来表示,FileStream类主要用于文件的读写,不仅能读写普通的文本文件,还可以读取
本文要介绍的C#本地读写二进制文件,二进制文件指保存在物理磁盘的一个文件。第一步:读写文件转成流对象。其实就是读写文件流(FileStream对象,在Syste
本文实例讲述了C#从文件流读取xml文件到DataSet并显示的方法。分享给大家供大家参考。具体实现方法如下:复制代码代码如下:DataSetds=newDat