麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > 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)
        {
        }
    }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 一本色道久久久888 国产一国产精品一级毛片 国产精品高潮视频 | 成年免费网站 | 一级国产航空美女毛片内谢 | 欧美成人精品欧美一级乱黄 | 91精品国产乱码久久久久 | 国产精品一区二区三区在线播放 | 亚洲第一成人在线观看 | 久久撸视频 | 亚洲人成电影在线 | 国产成人精品区 | 久久老司机精品视频 | 亚洲午夜久久久精品一区二区三区 | 久久影库 | 香蕉成人在线视频 | 国产成人高清成人av片在线看 | 成码无人av片在线观看网站 | 在线观看中文字幕av | 亚洲一区二区不卡视频 | 亚洲精品一区二区三区在线看 | 亚洲天堂岛国片 | 国产一区日韩精品 | 黄色的视频免费观看 | 日本黄色免费观看视频 | 久久久成人一区二区免费影院 | 911精品影院在线观看 | 99视频在线观看视频 | 中文字幕精品在线播放 | 欧美一级视频免费看 | 欧美一级片一区 | 视频一区二区三区在线 | 污视频在线免费 | 中文区永久区 | 欧美伦交 | 国产精品www | free台湾极品性hd | 国产女厕一区二区三区在线视 | hdjapanesemassagehd日本 | www久| 日本在线一区二区 | 88xx成人精品视频 | 毛片在线免费观看视频 |