一、拆箱装箱
//装箱: 是将值类型转化为引用类型的过程
//拆箱: 是将引用类型转化为值类型的过程
int a = 1;
object b = a; //装箱操作
object c = 1;
int d = (int)c; // 拆箱操作
//装箱:用于在垃圾回收堆内存中储存的值类型
//拆箱:从Object类型到值类型 或从接口类型到实现接口的值类型的转换
二、文件的读取和写入
使用File、Directory、FileInfo和DirectoryInfo用于文件和目录操作的类。
1. 常用功能对比
2.如何选择
- 用 File/Directory :
- 只需单次操作(如读取一次文件)。
- 路径是动态生成的,无需重复操作同一对象。
- 用 FileInfo/DirectoryInfo 当:
- 需要多次操作同一文件/目录(如监控属性变化)。
- 需要缓存文件/目录的元数据(如大小、创建时间)。
- 需要更面向对象的编程风格(如方法链式调用)。
三、使用FileStream读数据写数据
string path = Directory.GetCurrentDirectory() + "\\写文件.txt";
FileInfo fi = new FileInfo("path")
//创建文件 当路径不存在时 会创建一个
fi.Directory.Create();
// FileStream 文件中任何位置的读写
// 1. 打开文件 确定文件流 是写入数据还是读数据 写数据
FileStream stream = fi.OpenWrite();
// 2. 写数据
byte[] bytes = { 1, 2, 3, 4, 5, 6, 7, 8 };
// Write 写入数据 bytes 要写书的数据 写多少? 0 从0开始 写进去bytes.Length 个
stream.Write(bytes, 0, bytes.Length);
// 3. 关闭文件流 释放掉与之关联的所有资源
stream.Close();
Console.WriteLine("写入成功");
// 读取数据
// 1. 打开文件流 确定是读还是写 读数据
FileStream streamRead = fi.OpenRead();
// 2. 将读到的数据放到暂存区 不确定能读取到几个 可以是用FileInfo中的Length属性 获取读取文件中的数据长度
byte[] bytes1 = new byte[fi.Length];
//Read 读数据 并返回读到的数据个数
int a = streamRead.Read(bytes1, 0, bytes1.Length);
Console.WriteLine(a);
foreach (var item in bytes1)
{
Console.WriteLine(item);
}
// 关闭流
streamRead.Close();
四、StreamWriter写入流与StreamReader读取流
写入流中 public StreamWriter (string path, bool append);
若要追加数据到该文件中,则为 true;若要覆盖该文件,则为 false。 如果指定的文件不存在,该参数无效,且构造函数将创建一个新文件。
string path=Directory.GetCurrentDirectory()+ "\\TextFile4.txt";
// 定义写入流
StreamWriter sw=new StreamWriter(path);
sw.WriteLine("ccccc");
sw.Close();
//定义读取流
StreamReader sr=new StreamReader(path);
Console.WriteLine(sr.ReadToEnd());
sr.Close();