在C#中,可以使用System.IO命名空间下的类来保存文件
一:文本写入和读取 StreamWriter、StreamReader
private void test1()
{
// [1] 创建文件流(如果已存在文件则覆盖)
FileStream fs = new FileStream("D:\\myfile\\myfile.txt", FileMode.Create);
// [2] 创建写入器
StreamWriter sw = new StreamWriter(fs);
// [3] 以流的方式写入数据
sw.Write("我是写入内容");
//sw.WriteLine("我是写入内容");
// [4] 关闭写入器
sw.Close();
// [5] 关闭文件流
fs.Close();
}
// 读取文件
private void test2()
{
// [1] 创建文件流(如果已存在文件则覆盖)
FileStream fs = new FileStream("D:\\myfile\\myfile.txt", FileMode.Open);
// [2] 创建读取器
//StreamReader sr = new StreamReader(fs,Encoding.Default);//加编码
StreamReader sr = new StreamReader(fs);
// [3] 以流的方式读取数据
string str = sr.ReadToEnd();
Console.WriteLine(str);
// [4] 关闭读取器
sr.Close();
// [5] 关闭文件流
fs.Close();
}
// 写入日志类型
private void test3()
{
// [1] 创建文件流(如果已存在文件则覆盖)
FileStream fs = new FileStream("D:\\myfile\\myfile.txt", FileMode.Append);
// [2] 创建写入器
StreamWriter sw = new StreamWriter(fs);
// [3] 以流的方式"逐步写入"数据
sw.WriteLine(DateTime.Now.ToString() + "[文件操作正常!]");
// [4] 关闭写入器
sw.Close();
// [5] 关闭文件流
fs.Close();
}
// 对象写入
private void test11()
{
Student student = new Student();
student.Name = "Test";
student.Age = 1;
FileStream fs = new FileStream("student.obj", FileMode.Create);// 可以写相对路径(默认程序debug下或release中)
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(student.Name);
sw.WriteLine(student.Age);
sw.Close();
fs.Close();
}
// 对象读取
private void test12()
{
FileStream fs = new FileStream("student.obj", FileMode.Open);
StreamReader sr = new StreamReader(fs);
Student student = new Student()
{
Name = sr.ReadLine(),
Age = Convert.ToInt32((string)sr.ReadLine())
};
sr.Close();
fs.Close();
}
StreamWriter和StreamReader的重载方式有很多种,可以不用Filestream,直接传入一个物理地址,具体可以进入官网或反编译查询。sw.Write和sr.ReadToEnd()时一次性写入全部或读取全部sw.WriteLine和sr.ReadLine()是一次写入或读取一行。
二:文件操作 File
// 删除文件
private void test4()
{
File.Delete("D:\\myfile\\myfile.txt");
}
// 赋值文件
private void test5()
{
// 判断目标文件夹文件是否存在
if (File.Exists("D:\\myfile2\\myfile.txt"))
{
File.Delete("D:\\myfile2\\myfile.txt");
}
File.Copy("D:\\myfile\\myfile.txt", "D:\\myfile2\\myfile.txt");
}
// 移动文件
private void test6()
{
if (File.Exists("D:\\myfile2\\myfile.txt"))
{
File.Delete("D:\\myfile2\\myfile.txt");
}
if (File.Exists("D:\\myfile\\myfile.txt"))
{
File.Move("D:\\myfile\\myfile.txt", "D:\\myfile2\\myfile.txt");
}
else
{
Console.WriteLine("文件不存在");
}
}
三:目录操作 Directory
// 获取目录下的所有文件
private void test7()
{
string[] files = Directory.GetFiles("D:\\myfile");
}
//获取目录下的所有字目录
private void test8()
{
string[] dirs = Directory.GetDirectories("D:\\myfile");
}
// 创建目录
private void test9()
{
Directory.CreateDirectory("D:\\myfile");
}
// 删除目录
private void test10()
{
//Directory.Delete("D:\\myfile"); // 要求目录必须为空(不能有文件)
//使用DirectoryInfo对象,可以删除不为空的目录
DirectoryInfo dir = new DirectoryInfo("D:\\myfile");
dir.Delete(true);
}
四:文本写入和读取(二进制格式) BinaryWriter、BinaryReader
// 写入二进制文件
private void test15()
{
string filePath = "binary_output.dat";
try
{
using (BinaryWriter writer = new BinaryWriter(File.OpenWrite(filePath)))
{
int intValue = 42;
double doubleValue = 3.14159;
writer.Write(intValue);
writer.Write(doubleValue);
}
Console.WriteLine("二进制文件写入成功:" + filePath);
}
catch (Exception ex)
{
Console.WriteLine("发生异常:" + ex.Message);
}
}
// 读取二进制文件
private void test16()
{
string filePath = "binary.dat";
try
{
using (BinaryReader reader = new BinaryReader(File.OpenRead(filePath)))
{
int intValue = reader.ReadInt32();
double doubleValue = reader.ReadDouble();
Console.WriteLine("整数值:" + intValue);
Console.WriteLine("双精度值:" + doubleValue);
}
}
catch (FileNotFoundException)
{
Console.WriteLine("文件不存在:" + filePath);
}
catch (Exception ex)
{
Console.WriteLine("发生异常:" + ex.Message);
}
}
五:序列化和反序列化(二进制格式) BinaryFormatter
// 保存对象
private void test13()
{
Student student = new Student();
student.Name = "Test";
student.Age = 1;
// 创建文件流
FileStream fs = new FileStream("student.stu", FileMode.Create);// 可以写相对路径(默认程序debug下或release中)
// 创建二进制格式化器
BinaryFormatter formatter = new BinaryFormatter();
try
{
// 调用序列化方法
formatter.Serialize(fs, student);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
// 关闭文件流
fs.Close();
fs.Dispose();
//finally
//{
// if (fs != null)
// {
// fs.Close();
// fs.Dispose();
// }
//}
}
// 读取对象
private Student test14()
{
// 创建文件流
FileStream fs = new FileStream("student.stu", FileMode.Open);// 可以写相对路径(默认程序debug下或release中)
// 创建二进制格式化器
BinaryFormatter formatter = new BinaryFormatter();
// 调用反序列化方法
Student student;
try
{
student = (Student)formatter.Deserialize(fs);
return student;
}
catch (Exception ex)
{
Console.WriteLine($"{ex.Message}");
}
finally
{
if (fs != null)
{
fs.Close();
fs.Dispose();
}
}
//return default(Student);
return default;
//return new Student();
}
六:XML方式
// 读取XML文件
private void test17()
{
//【1】创建XML文档操作对象
XmlDocument objDoc = new XmlDocument();
//【2】加载XML文件到文档对象中
objDoc.Load("StuScore.xml");
//【3】获取XML文档根目录
XmlNode rootNode = objDoc.DocumentElement;
List<Student> list = new List<Student>();//创建对象集合
//【4】遍历根节点(根节点包含左右节点)
foreach (XmlNode stuNode in rootNode.ChildNodes)
{
if (stuNode.Name == "Student")
{
Student objStu = new Student();
//【5】遍历子节点
foreach (XmlNode subNode in stuNode)
{
switch (subNode.Name)
{
case "StuName":
objStu.Name = subNode.InnerText;
break;
case "StuAge":
objStu.Age = Convert.ToInt32(subNode.InnerText);
break;
}
}
list.Add(objStu);
}
}
Console.WriteLine(list);
}
// XML XmlReader读取器
private void test18()
{
XmlReader reader = XmlReader.Create("StuScore.xml");
while (reader.Read())
{
if (reader.Name == "Version")
{
Console.WriteLine(reader.GetAttribute("vNo") + reader.GetAttribute("pTime"));
break;
}
}
}
// XML写入
private void test19()
{
XmlDocument doc = new XmlDocument();
// 创建XML声明
XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration("1.0", "utf-8", null);
doc.AppendChild(xmlDeclaration);
// 创建一个根元素
XmlElement rootElement = doc.CreateElement("", "root", "");
doc.AppendChild(rootElement);
// 创建子元素
XmlElement childElement = doc.CreateElement("", "child", "");
childElement.SetAttribute("attribute", "value");
childElement.InnerText = "Text Content";
rootElement.AppendChild(childElement);
// 保存到文件
doc.Save("output.xml");
}
网友评论