深入.NET平台和C#编程
第五章 文件读写与XML
命名空间:using System.IO
读写文件:
1. 建立一个文件流,流是一个用于数据传输的对象,FileStream类
FileStream(string FilePath,FileMode),FileMode指定如何打开文件的模式,是个枚举类型
FileStream myFs = new FileStream(path,FileMode.Create);
2. 创建阅读器或写入器
StreamWriter sw = new StreamWriter(数据流对象); //创建写入器
StreamReader sr = newStreamReader(数据流对象);//创建读取器
3. 执行读写操作
StreamWrite.Write() 用于写入流
StreamWrite.WriteLine() 写入一行数据,写入某些数据后跟换行符
StreamReader.ReadLine() 读取文件流中的一行数据,并返回字符串
StreamReader.ReadToEnd() 从当前位置读取到末尾,返回字符串
4. 关闭阅读器或写入器
StreamWrite.Close()
StreamReader.Close();
5. 关闭文件流
FileStream.Close()
【文件和目录操作】
命名空间:using System.IO
File类 & Directory类 (静态类)
【XML】
可扩展标记性语言,用于描述数据
特点:
1.XML中用于描述数据的各个节点可以i自由的扩展。
2.XML文件中的节点区分大小写。
3.XML中的没对标记通常称为节点,成对出现,用来描述节点存储的内容。
自己写一个XML文档 Student.xml
<students>
<studentid="1">
<name>InSag</name>
<age>12</age>
</student>
<studentid="2">
<name>wangwu</name>
<age>24</age>
</student>
<studentid="3">
<name>lisi</name>
<age>27</age>
</student>
<studentid="4">
<name>waiNews</name>
<age>35</age>
</student>
<studentid="5">
<name>Jack</name>
<age>34</age>
</student>
</students>
操作MXL文档的属性和方法:
命名空间:using System.xml
XmlDocument对象
DocumentElement 属性:获取根节点。
ChildNodes 属性:获取所有子节点。
Load() 方法:读取整个XML文档结构。
XmlNode对象
InnerText 属性:当前节点的值。
Name 属性:当前节点的名字。
ChildNodes 属性:当前节点的所有子节点。
实例:
首先我们自己写一个XML文档 Student.xml(结构如上),将Student.xml读取出来并添加到ListView控件中,并添加“插入”和“删除”数据功能。
Student.xml中有很多学员信息,我们要将每个学员的信息写入ListView中,用面向对象思考,每条记录就是一个对象,于是我写了一个Student类,用于存储从XML文件中读取出的的学员信息。(如图)

目标1:取出Student.xml中的信息添加到ListView
在主窗体中创建学生类集合,创建XML对象,以及读取XML文档的方法和填充ListView的方法
using System.Collections.Generic;
using System.Windows.Forms;
using System.Xml;
//创建学员集合对象
List<Student> stuList = new List<Student>();
//创建xml对象
XmlDocument xmlDoc = new XmlDocument();
///<summary>
///读取XML数据写入集合
///</summary>
public void readerXMLtoList()
{
//加载xml文件
xmlDoc.Load("Student.xml");
//获取根节点
XmlNode node = xmlDoc.DocumentElement;
//循环取出根节点下的子节点
foreach (XmlNode nodes in node.ChildNodes)
{
//创建一个学生对象
Student stu = new Student();
//获得节点的属性:<student id="2">
stu.Id = Convert.ToInt32(nodes.Attributes["id"].Value);
//循环子节点下的子节点
foreach (XmlNode nodeChild in nodes.ChildNodes)
{
//判断当前节点的Name属性
switch (nodeChild.Name)
{
//如果节点Name属性=name,那么学生对象的name属性 = 节点的Name
case "name": stu.Name = nodeChild.InnerText; break;
case "age": stu.Age = Convert.ToInt32(nodeChild.InnerText); break;
}
}
//将该学生对象添加到集合
stuList.Add(stu);
}
}
///<summary>
///将集合中的数据填充到ListView
///</summary>
public void FillView()
{
foreach (Student stu in stuList)
{
ListViewItem lvi = new ListViewItem(stu.Id.ToString());
lvi.Tag = stu.Id;
lvi.SubItems.Add(stu.Name);
lvi.SubItems.Add(stu.Age.ToString());
lvStu.Items.Add(lvi);
}
}
///<summary>
///窗体加载
///</summary>
///<param name="sender"></param>
///<param name="e"></param>
private void Form3_Load(object sender, EventArgs e)
{
readerXMLtoList();
FillView();
}
目标2:添加删除功能,将选中项删除,并保存XML文档
///<summary>
///删除节点
///</summary>
///<param name="sender"></param>
///<param name="e"></param>
private void msitDel_Click(object sender, EventArgs e)
{
if (lvStu.SelectedItems.Count > 0)
{
//获取选中项的Tag值,作为被删除的节点属性值
int index =Convert.ToInt32( lvStu.SelectedItems[0].Tag);
//获取该属性值的节点
XmlNode node = xmlDoc.SelectSingleNode
(string.Format("//students/student[@id = {0}]",index));
//删除节点
xmlDoc.DocumentElement.RemoveChild(node);
//保存XML文件
xmlDoc.Save("Student.xml");
}
}
目标3:添加插入功能,保存
///<summary>
///插入数据
///</summary>
///<param name="sender"></param>
///<param name="e"></param>
private void btnInsert_Click(object sender, EventArgs e)
{
//获取根节点,用于添加student节点
XmlNode xmlNode = xmlDoc.DocumentElement;
//建立name节点
XmlElement name = xmlDoc.CreateElement("name");
name.InnerText = txtName.Text;//赋值
//建立Age节点
XmlElement age = xmlDoc.CreateElement("age");
age.InnerText = txtAge.Text;//赋值
//建立Student节点
XmlElement student = xmlDoc.CreateElement("student");
//创建一个属性值
XmlAttribute xab = xmlDoc.CreateAttribute("id");
xab.InnerText = txtID.Text;//赋值
//为节点添加属性
student.SetAttributeNode(xab);
#region在指定位置插入节点
//创建指定的节点
XmlNode InsertNode = xmlDoc.SelectSingleNode
(string.Format("//students/student[@id = {0}]",txtInsterNum.Text));
//将新节点插入指定的节点之后
xmlNode.InsertAfter(student,InsertNode);
//插入指定节点之前xmlNode.InsertBefore
//添加节点到文档结尾xmlNode.AppendChild(student);
#endregion
//添加student节点下的子节点
student.AppendChild(name);
student.AppendChild(age);
//保存XML
xmlDoc.Save("Student.xml");
}
本文是深入.NET平台和C#编程第五章的学习笔记,主要探讨了.NET框架的核心概念,C#语言的高级特性,以及如何使用ListView控件和XML进行数据操作。通过实例解析,深入浅出地讲解了.NET平台的内部工作机制和C#编程的实用技巧。


被折叠的 条评论
为什么被折叠?



