C#文件流
来源:互联网 发布:网络吐槽类脱口秀节目 编辑:程序博客网 时间:2024/05/22 09:43
——FileStream
FileSream操作的是字节数组,所以FileStream可以用来操作任何类型的文件
使用FileStream读写数据的步骤
- 创建FileStream实例对象
- 创建字节数组来限定每次读取数据的大小
- 执行读取数据操作,
- 对字节数组进行解码/编码操作
- 关闭流
- 释放流所占用的资源
string path=@"C:\Users\SpringRain\Desktop\new.txt";FileStream stream = new FileStream(path,FileMode.OpenOrCreate, FileAccess.Read);byte[] Buffer = new byte[1024 * 1024 * 5];int R = stream.Read(Buffer, 0, Buffer.Length);string str = Encoding.UTF8.GetString(buffer,0, r);stream.Close();stream.Dispose();
注意
- FileStream构造函数常用的三个参数
- 参数1——路径
- 参数2——枚举类型FileMode指定系统打开文件的方式(常用Append,OpenOrCreate)
- 参数3——枚举类型FileAccess,指明对文件中的数据操作(write,read)
- 创建的字节数组的作用
- 这个字节数组是用于储存读取出来的数据的,我们提前定义了数值大小,则数组中只能存那么多值这样就起到了限定的作用
- 在执行读取操作,往字节数组中填写数据的时候
- 如果读取出来的数据大小不够填充字节数组的大小,系统会用空格填充,但是可以在解码的时候可以指定截取字节数组中多少数据,用该步骤的返回值确定,该步骤返回一个int类型的值,表示读取到的实际字节的长度
- 参数1——用于存数据的字节数组
- 参数2——重读取文件的哪里开始读取
- 参数3——在文件中读取数据到哪个位置
- 对字节数组进行解码操作
- 参数1——解码的字节数组
- 参数2——开始解码位置
- 参数3——结束解码位置,其余的扔掉
上面的过程需要我手动的释放资源,微软也考虑到了这一点比较麻烦,所以提供了一种写法帮助我们自动释放资源,上面的过程就可以写成下面这样子
string path=@"C:\Users\SpringRain\Desktop\new.txt";using (FileStream stream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read)) {byte[] Buffer = new byte[1024 * 1024 * 5];int R=stream.Read(Buffer,0,Buffer.Length);string str=System.Text.Encoding.UTF8.GetString(Buffer,0,R); }//Using会帮助我们自动释放资源
当然往一个文件中写入数据也是这样的,只需要改一点点参数就好了
string path=@"C:\Users\SpringRain\Desktop\new.txt";using (FileStream fsWrite = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write)){string str = "Hello world";byte[] buffer = Encoding.UTF8.GetBytes(str);fsWrite.Write(buffer, 0, buffer.Length);}//这样王文件中写入数据的话会覆盖原有的数据,如果想往原来的文件中添加数据,就把FileMode.OpenOrCreate改为FileMode.Append
下面一个例子用读取和写入来实现多媒体文件的复制
using (FileStream fRead = new FileStream(soucre, FileMode.Open, FileAccess.Read)) { using (FileStream fWrite = new FileStream(target, FileMode.Create, FileAccess.Write)) { byte[] buffer = new byte[1024 * 1024 * 5]; while (true) { int r = fRead.Read(buffer, 0, buffer.Length); if (r == 0) break; fWrite.Write(buffer, 0, r); } } }//我们创建一个负责读取的流//创建一个负责写入的流//因为文件可能会比较大,所以我们在读取的时候 应该通过一个循环去读取//返回本次读取实际读取到的字节数//如果返回一个0,也就意味什么都没有读取到,读取完了
——StreamReader
有时候我们只需要以流的方式读取文本数据,那么除了使用FileStream之外,还有一个更简单的方式——StramReader
string path = @"C:\Users\Blue\Desktop\项目站点.txt"; using (StreamReader sr = new StreamReader(path,Encoding.Default)) { while (!sr.EndOfStream) { Console.WriteLine(sr.ReadLine()); } }//StreamReader对象的EndOfStream属性是用来判断是否读取完了指定的文件
——StraemWriter
以流的方式写入文本数据
using (StreamWriter sw=new StreamWriter(path,true)){ sw.Write("I am Appended"); };//如果省掉第二个bool参数,则会覆盖原文内容,第二参数表示是否为append
1 0
- C#文件流操作
- c#文件流读写
- C#读取文件流
- C#文件流操作
- C#文件流操作
- c# 读取文件流
- C#文件流
- C#文件流
- c# 处理文件流
- C# 文件流 处理大文件上传
- C#文件流实现文件复制
- C# 文件流的操作
- C#异步操作文件流
- C#文件的读写 -流
- C#顺序读取文件流
- c#路径、文件和流
- C#文件流的操作
- C# 文件流读写记事本
- Error creating bean with name 'amqpTemple' Could not resolve matching constructor (hint: specify
- Hibernate.cfg.xml
- iOS-定位
- String
- 杭电OJ 1032 给定i,j未说大小,两者大小不定
- C#文件流
- 逻辑地址与物理地址的转换
- 【android】:android开发积累3之如何实现菜单栏
- 简单的搭建wordpress
- JNI中很有用的jstring 与 const char* 的相互转换函数
- java第一课(1):类和对象基本篇
- 蓝色妖姬 t3200 linux连接
- ACM水题 An easy task
- Java 写有n个人围成一圈,顺序排号,从第一个人开始报数(从1~3报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号。