【第18天】18c#今日小结

1.BufferStream字节流临时存储对象

BufferedStream 缓存区存储对象,特点读取性能比较快,也需要包装其他文件流(FileStream),读取只有这一个类。

1 创建临时存储对象
BufferedStream buff = new BufferedStream(File.Create(@"1.txt"));

2 写入内容 传递一个字节数组
 byte[] info1 = new UTF8Encoding().GetBytes("窗前明月光,疑是地上霜,举头望明月,低头思故乡\n");
 buff.Write(info1, 0, info1.Length);-----从字节数组的0位置开始写 写字节数组长度的内容

 byte[] info2 = new UTF8Encoding().GetBytes("Good good study day day up\n");
 buff.Write(info2, 0, info2.Length);

 byte[] info3 = new UTF8Encoding().GetBytes("个税是颠倒是的是的");
 buff.Write(info3, 0, info3.Length);

 buff.Flush();
 buff.Close();

3 创建读取存储对象
buff = new BufferedStream(File.OpenRead(@"1.txt"));
byte[] arr = new byte[buff.Length];-----定义数组存储读取的数据 长度为缓存区的大小
while (buff.Read(arr, 0, arr.Length)>0) ----- 如果数据没读完 继续读, 
{
    Console.WriteLine(Encoding.UTF8.GetString(arr));-----把arr转成字符串进行展示
}

2.Directoy文件夹操作对象

Directory:提供一些处理文件夹的操作的属性和方法
DirectoryInfo:设置文件夹属性的类 例如隐藏文件夹,只读文件夹等属性

1创建文件夹 创建在Debug文件下 Image/OK这样的目录
Directory.CreateDirectory(@"Image/OK");

 2 Exists 判断文件路径是否存在
 if (!Directory.Exists(@"Config")) 
 {
     Console.WriteLine("1111");
     Directory.CreateDirectory(@"Config");
 }

3 GetCurrentDirectory() 获取当前目录 是一个绝对路径
Console.WriteLine(Directory.GetCurrentDirectory());

我的这里获得的是E:\qq下载\c#语法\2025.12.25C#高级语法(十九)\第19天\03Directoy文件夹操作对象\bin\Debug

4 Delete() 删除文件夹的时候 参数2为true时,可以删除目录以及子目录;参数2为false的话,如果有子目录,不允许删除
Directory.Delete(@"i1", false);


5Move() 把参数1位置文件或者文件夹 移动到参数2这个位置上
if (!Directory.Exists(@"../Test1"))
{               
     Directory.Move(@"Image1", @"../Test1");
}

6 GetDirectories 获取当前目录子目录
string[] paths =   Directory.GetDirectories("../Debug");
string[] paths = Directory.GetDirectories("E:\\qq下载\\c#语法\\2025.12.25C#高级语法(十九)\\第19天\\03Directoy文件夹操作对象\\bin\\Debug");
 foreach (string path in paths)
{
     Console.WriteLine(path+"--------------");
}

7GetFiles 获取文件
string[] path1 = Directory.GetFiles("E:\\qq下载\\c#语法\\2025.12.25C#高级语法(十九)\\第19天\\03Directoy文件夹操作对象\\bin\\Debug");
foreach (var item in path1)
{
    Console.WriteLine(item + "+++++++");
}

8 隐藏文件夹
DirectoryInfo info = new DirectoryInfo(@"新建文件夹");
Attributes-----属性
FileAttributes.Hidden -----文件的隐藏属性
info.Attributes = FileAttributes.Hidden;

3.StreamReader和StreamWriter

BinaryReader br = new BinaryReader(,)-----二进制读取原始数据参数是文件流,必须借助fileStream,有时候会出现文档内容出现乱码
StreamReader 读取流,实现文件读取功能,并且参数可以直接是路径和编码
using(),声明一个块级的作用域,在声明的变量,在{}体之后已经被释放

 using (StreamReader sr = new StreamReader(@"2.txt",Encoding.UTF8))
 {
     sr.ReadLine() -----读取一行
     string lines;
     while ((lines=sr.ReadLine())!=null) -----一行一行去读,如果读取这一行赋值lines,并且lines==null证明读取完了
     {
         Console.WriteLine(lines);
     }
 }

StreamWriter 写入对象
using (StreamWriter sw = new StreamWriter(@"2.txt"))
{
    sw.WriteLine("平安夜当时每个姓氏要一块钱,从1号要24号 凑24 买一个苹果");
}

4.json序列化和反序列化

文件内容存储的格式

1 json格式,[] 代表数组 {}代表对象 ,
2 xml格式
3 ini格式
4 csv格式

json字符串要求:属性必须使用""括起来,属性值可以基本数据类型也可以对象类型,不能是函数,
最后一个属性值不能带逗号

json字符串格式
  {
     "name":"zs",
      "age":10
  }

序列化:  把对象转成字符串
反序列化:把字符串格式转成对象
目的:先把对象转成json字符串格式。再通过之前学的写入对象写到文本中,
读取的先从文档读取成一个字符串,再把字符转成对应的对象。

建议直接使用第三方进行json序列化
使用JSon.net第三方:点击引用--->管理nuget程序包--->切换浏览输入第三方包名关键字------>点击右边安装(本篇后面使用的就是这个)后面附安装教程。

class People
{
    public string Name { get; set; }
    public int Age { get; set; }
}-----先创建一个类

1 把对象存储到文档中
People p1 = new People() { Name="张三",Age = 10};

把对象转成json字符串
序列化过程
SerializeObject() -----解析对象,把对象转成字符串,参数转成字符串的对象 例如p1转成字符串
string dataString =  JsonConvert.SerializeObject(p1);

写入指定文档
File.WriteAllText(@"1.txt", dataString);

2 读取
string ss = File.ReadAllText(@"1.txt");

反序列化过程
把字符串转成对象
People pp = JsonConvert.DeserializeObject<People>(ss);
Console.WriteLine(pp.Name+"----"+pp.Age);

安装教程

这样就完成了。

5.数组转成json格式

先创建一个类

class Student
{
    public string Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

创建数组并添加对象

 List<Student> list = new List<Student>();
 for (int i = 0; i < 10; i++)
 {
     Student s = new Student();
     s.Name = "长江" + i + "号";
     s.Age = i+18;
     s.Id = "00" + i;
     list.Add(s);
 }

把数组转成json字符串 存储本地文
string data = JsonConvert.SerializeObject(list);

  using (StreamWriter sw = new StreamWriter(@"1.json"))
  {
      sw.WriteLine(data);-----写入文档
  }

 读取本地文件值是字符串
 using (StreamReader sr = new StreamReader(@"1.json"))
 {
     string lines;
     while ((lines = sr.ReadLine()) != null)
     {
         Console.WriteLine(lines);
         List<Student> list1 = JsonConvert.DeserializeObject<List<Student>>(lines);
         for (int i = 0; i < list1.Count; i++)
         {
             Console.WriteLine(list1[i].Name + "---" + list1[i].Age);
         }
     }
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值