FileStream操作字节的(可以操作任意类型的文件,因为所有文件都最终都以字节的形式来进行存储) 然而StreamReader与StreamWriter是操作字符
//使用StreamWriter写入一个文件
//参数2 默认值fasle 不写默认覆盖 写true会追加到文本后面
//using (StreamWriter sw = new StreamWriter(@"C:\Users\Administrator\Desktop\练习4.txt", true))
//{
//
// 写入内容
// sw.WriteLine("fhfgjhfgg", Encoding.ASCII)
//}
//using (FileStream students = new FileStream(@"C:\Users\Administrator\Desktop\学生档案.txt", FileMode.OpenOrCreate, FileAccess.Write))
//{ // for (int i = 0
// { // Console.WriteLine("请输入学生的信息:")
// Console.Write("年龄:")
// int age = int.Parse(Console.ReadLine())
// Console.Write("姓名:")
// string name = Console.ReadLine()
// Console.Write("性别:")
// string sex = Console.ReadLine()
// Console.Write("班级:")
// string cla = Console.ReadLine()
// Console.Write("爱好:")
// string hobby = Console.ReadLine()
// byte[] buffer = Encoding.UTF8.GetBytes(age+"\n"+name + "\n" +sex + "\n" +cla + "\n" +hobby)
// students.Write(buffer, 0, buffer.Length)
// }
//
//} //StreamReader ST = new StreamReader(@"C:\Users\Administrator\Desktop\学生档案.txt", Encoding.UTF8)
//Console.WriteLine(ST.ReadToEnd())
//ST.Close()
//ST.Dispose()
//Console.ReadLine()
1、使用FileStream来读取数据
//参数1、文件路径
//参数2、操作文件的方式
//参数3、文件流对象如何访问该文件 例子:FileStream fs = new FileStream(@"path路径",FileMode.OpenOrCreat,FileAccess.Read)
Open:打开 文件不存在会抛出异常;
OpenOrCreat:打开或者创建 文件不存在会创建;
Creat:创建 如果存在就会覆盖
CreatNew:创建 如果存在会抛异常
Append:追加 文件不存在就会创建
2、限制读取数据的大小
//1024 byte =1Kb
//1024 kb = 1Mb
byte [] buffer = new bute[1024*1024*5]
//使用Read进行读取
//需要一个字节数组给多大就读多大,从而限制不会一次全都读出来
//参数1:从数据流中读取的数据的大小
//参数2:从哪个字节开始读取
//参数3:读取的字节总数 int n = fs.Read(buffer,0,buffer.Length)
//返回读取到的有效字节数
//虽然GC非常强大,但并不是所有的资源都可以被回收的几个集合,其中就会有文件流
<1> 关闭文件流:fs.Close()
<2> 释放文件流所占用的内存资源:fs.Dispose()
//现在所有的数据都在字节数据当中,人看不懂,需要将其转换按照字节对应的字符编码解码为 字符串。
<1> String s = Encoding.UTF8.GetString(buffer,0,buffer.Length)
<2> String s =Encoding.UTF8.GetString(buffer,0,n)
//第二个这里为什么不使用buffer.Length来设置读取的数据大小???
因为啊,此时是把数据为5MB的字符串,而当文本的实际不够5MB,此时会将多出来的部分使用空格去填充到5MB 需要在解码时去读取有效字节的码数,以防止发生此类的情况
//直接输出 Console.WriteLine(s)