先看下File和FileStream的区别:

File在读取文件时,是一下子全部读取出来;

FileStream在读取文件时,是一点一点的读取的,对于内存来说,压力更小一些;

FileSteam 读取数据:

操作字节的(意味着所有的文件格式都可以操作,可操作大文件,小文件的操作一般使用File)

1、创建FileStream

// 创建
// 参数一:指定文件路径
// 参数二:FileMode 是一个枚举类,指定操作系统打开文件的方式(针对文件做的操作)
// 参数三:FileAccess 是一个枚举类,指定此次操作是 读 还是 写 还是 读写(针对文件的数据做的操作)
FileStream fs = new FileStream(@"C:\Users\Administrator\Desktop\1.txt",
FileMode.OpenOrCreate, FileAccess.Read);

2、读

// 读取
// 参数一:字节数组,它会把读取到的数据放到这个字节数组中,我们可以使用这种方式可以限定它每次可以读取多少
// 参数二:表示从哪个地方往这个字节数组写入数据,通常从0开始
// 参数三:最多读取的字节数
// 返回值: 是一个int类型,如:我们每次读取5M,但是文件实际大小为2M,此时返回值就是本次实际读取
//        到的2M的大小
//不管多大小,每次只读取5M,
byte[] buffer = new byte[1024 * 1024 * 5];
int r = fs.Read(buffer, 0, buffer.Length);

3、转字符串、关闭流、释放资源

// 转成字符串
// 因为读取完是一个字节形式的,所以需要把字节转化为字符串格式的
// 参数二:从字节数组中哪个位置开始解码
// 参数三:解码多少个,下边的r是上边读取出来的字节
string s = Encoding.UTF8.GetString(buffer, 0, r);// 关闭流
fs.Close();// 释放流所占用的资源(c#中有几个不会自动被GC垃圾回收器回收,所以需要手动释放)
fs.Dispose();

4、如果读取的文件内容几字节或几KB ,此时我们输出上边字符串s时,在命令行中会出现大量的空字符串,原因:上边我们写的每次读取5M大小,但是实际文件夹大小只有几kb,前边它会使用大量的空字符串来表示,解决此问题,可以在字节转字符串时,通过参数二和参数三来处理。

读取结果:

FileSteam 写入数据:

将文件流对象对象的过程写在using当中,会自动的帮助我们释放所占用的资源。

// 把创建FileStream写在using括号中,目的帮助我们释放流所占用的资源
using (FileStream fs = new FileStream(@"C:\Users\Administrator\Desktop\1.txt", FileMode.OpenOrCreate, FileAccess.Write))
{string str = "哈哈哈哈哈哈哈";// 将字符串转字节数组byte[] buffer = Encoding.UTF8.GetBytes(str);fs.Write(buffer, 0, buffer.Length);
}
Console.ReadLine();

写入之前的文件内容:

写入之后的内容:

是按字节大小类写入文件的!!!

小例子:

1、多媒体文件的复制:

// 赋值一个多媒体文件
public static void GetCopyMadie(string source, string target)
{using (FileStream fsRead = new FileStream(source, FileMode.OpenOrCreate, FileAccess.Read)){using(FileStream fsWrite = new FileStream(target, FileMode.OpenOrCreate, FileAccess.Write)){// 每次读取的大小(5M)byte[] buffer = new byte[1024 * 1024 * 5];// 循环读取while (true){// 读取到的字节int r = fsRead.Read(buffer, 0, buffer.Length);if(r == 0){break;}// 写入新文件,每次写入r大小的字节数fsWrite.Write(buffer, 0, r);}    }}
}

StreamReader和StreamWriter

读:

操作字符的(只能操作文本文件)

1、所在的命名空间也是 using System.IO;

2、只能是单行读取文件内容,所以想读取全部文件内容需要循环读取。

string path = @"C:\Users\Administrator\Desktop\1.txt";
using (StreamReader fs = new StreamReader(path, Encoding.UTF8))
{while (!fs.EndOfStream){Console.WriteLine(fs.ReadLine());}
}

下边用到的方法:

(1)fs.EndOfStream 判断是否读到了流结尾。

(2)fs.ReadLine()  从当前流中读取一行字符,并将数据作为字符返回。

写:

1、写入一个文本文件;

参数一:指定要写入的路径,存在则根据参数二来判断是覆盖内容 还是 插入内容

参数二:bool类型,true为插入内容,false为覆盖原来内容

参数三:编码格式

static void Main(string[] args)
{string path = @"C:\Users\Administrator\Desktop\1.txt";using (StreamWriter fs = new StreamWriter(path, true, Encoding.UTF8)){fs.WriteLine("写入一行数据");}Console.ReadLine();
}

c# - FileStream、StreamReader、StreamWriter相关推荐

  1. C# FileStream和StreamReader以及StreamWriter

    1. FileStream读写文件 FileStream是操作字节的,StreamReader和StreamWriter是操作字符的,重点掌握FileStream. 重点:将创建文件流对象的过程写在u ...

  2. python编码问题之encode、decode、codecs模块

    原文链接 #先说说编解码问题 编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码. Eg: ...

  3. C#学习七(包含File字节流,list泛型集合、拆装箱、ictionary字典,文件流FileStream、StreamReader和StreamWrite、多态)

    一.对前面部份的总结 using System.Collections; using System.IO; using System.Text;namespace _074_复习 {class Pro ...

  4. C# 第七章『I/O数据流』◆第5节:数据流—StreamWriter类、StreamReader类

    FileStream类的对象只能以字节的形式读取/写入数据,这就使操作变得非常困难,所以需要借用StreamWriter对象或StreamReader对象的方法来处理文件. 一.StreamWrite ...

  5. C# StreamReader、StreamWriter类文本文件操作

    StreamReader.StreamWriter位于命名空间System.IO下,功能与FileStream相比较弱,FileStream可以操作任何格式文件,但是StreamReader.Stre ...

  6. C# 中常用的文件流(FileStream、StreamReader/Writer、MemoryStream)

    文章目录 一:FileStream类 二:StreamReader/StreamWriter类 三:TextReader/TextWriter类 四:MemoryStream类 五:NetWorkSt ...

  7. c# FileStream、StreamReader/Writer、MemoryStream

    提及文件流,不得不先说以下几个类 FileStream,MemoryStream,NetWorkStream,StreamReader,StreamWriter,TextReader,TextWrit ...

  8. python里使用协程和StreamReader、StreamWriter来创建echo服务端

    Python游戏开发入门 http://edu.csdn.net/course/detail/5690 在这个程序里,与前面使用asyncio.Protocol协议不一样,使用底层的StreamRea ...

  9. 【转】C# 数据流详解(FileStream、MemoryStream、NetworkStream等类)

    本文章内容主要为数据流及相关辅助类: 流(Stream).文件流(FileStream).内存流(MemoryStream).网络流(NetworkStream).加密流(CryptoStream)以 ...

最新文章

  1. ASP.NET 3.5 企业级开发
  2. python3 hashlib加密库 md5 sha1 sha256 sha384 sha512 加盐
  3. laravel框架的基础学习路线(不带composer的)
  4. 为Java应用程序编写数据驱动的测试
  5. mysql f_MySQL
  6. 协同工作php,PHPOA:灵活、高效、协同,让企业高效运转
  7. c++向量和数组的区别_Spark机器学习-Java版(一)-向量和矩阵
  8. STM32板子电源绘制原理
  9. 大专适合学习php么_我想自学PHP,可以么?
  10. 一维装箱、二维装箱、三维装箱 区别
  11. 栅栏密码加密/解密【传统型】在线工具
  12. 微型计算机原理王忠民PPT,微型计算机原理4 王忠民著.ppt
  13. 做一个有批判性思维的程序员
  14. 支付宝小程序:报错 insufficient-isv-permissions 错误原因: ISV权限不足解决方案
  15. 广州电子路考视频发布 2014广州电子路考考点
  16. 微信开发者工具使用git
  17. 批量注册163邮箱的代码
  18. CCF C³-20@滴滴:智能技术与交通治理 | 报名
  19. 鸿蒙系统上市时间p20pro,华为P20/20 Pro今日正式发布:外观配置详细汇总
  20. ESP8266+CH340下载电路+LCD显示屏显示天气时钟

热门文章

  1. [附源码]java毕业设计房屋中介管理系统
  2. 密码学研究-Provider
  3. 数学三大核心领域概述:代数
  4. 【蓝桥杯-单片机学习笔记(十四)】DS1302
  5. leetcode(15):华为HJ95||人民币转换
  6. SQLServer 统计数据量
  7. Pandas基本数据对象及操作
  8. 10 个开源免费的电子商务平台
  9. 庞博 上海交大计算机系,颜清子产品经理是做什么的 庞博和颜清子是上海交通大学同学...
  10. 苹果平板不用原装笔可以吗?值得入手的几款ipad触控笔