国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#加XML文件非流讀寫方法

2023-05-15 12:29:36
字體:
來源:轉載
供稿:網友

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和XMLWriter
namespace 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文擋重寫,記錄全無,因此舍棄此方法。
                    // 此方法在后面用于錯誤處理,建立新文件時。
                    /*
                    XmlWriterSettings settings = new XmlWriterSettings();
                    settings.Indent = true;
                    settings.NewLineOnAttributes = true;
                    XmlWriter thisWriter = XmlWriter.Create("myTestXML.xml", settings);
                    // 首行的聲明
                    thisWriter.WriteStartDocument();
                    // 開始輸入內容到文件中
                    thisWriter.WriteStartElement("User");
                    thisWriter.WriteAttributeString("UserSetting", "Customer");
                    thisWriter.WriteElementString("Username", username);
                    thisWriter.WriteElementString("Password", password);
                    thisWriter.WriteEndElement();
                    thisWriter.WriteEndDocument();
                    thisWriter.Flush();
                    thisWriter.Close();
                    MessageBox.Show("寫入成功!", "成功");
                    */
                }
                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)
        {
        }
    }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 肇东市| 蒲城县| 桑日县| 灵石县| 温宿县| 宜兰市| 绍兴市| 隆化县| 区。| 龙陵县| 陇川县| 临猗县| 伊通| 彰武县| 塘沽区| 南投市| 洪湖市| 尼勒克县| 义乌市| 宜君县| 织金县| 海伦市| 潮州市| 通化县| 叶城县| 灵璧县| 松潘县| 静乐县| 龙胜| 百色市| 会昌县| 治多县| 社旗县| 乡宁县| 桑日县| 葵青区| 延川县| 栖霞市| 于都县| 闽清县| 呼玛县|