c#(f_0011)文件流
- 格式:pdf
- 大小:136.79 KB
- 文档页数:10
Write 方法 Write 方法的重载比较多,我们只学会用两个即可. 方法原型: public void Write(string value); public void Write(char value);
-> 第三个参数是 FileAccess 枚举,表示处理文件流的方式,可用值有
Read
表示读取数据
Write
表示写数据
ReadWrite 表示可写也可读
-> 对于 FileStream 对象使用时先熟练使用这一个构造方法重载,以后再学其他重载
2、现在连接的有了,下面是需要可以将数据写到“高速缓冲区”的方法了. 对于写数据, 使用 StreamWriter 对象. 该对象要完成的事情是,往 FileStream 维护的缓存中写数据,所以 使用的构造方法将 FileStream 对象作为参数. 另外,要写入数据需要考虑字符的格式,因此 将 Encoding.Default 作为第二个参数. 添加代码
static void Main(string[] args) { FileStream file = new FileStream(@“C:\fileStreamTest.txt”, FileMode.Create, FileAccess.Write); StreamWriter writer = new StreamWriter(file, Encoding.Default);
using(writer) {
4 / 10
string str1 = “我”; string str2 = “是”; string str3 = “一”; char ch1 = ‘个’; char ch2 = ‘测’; char ch3 = ‘试’; writer.Write(str1); writer.Write(str2); writer.Write(str3); writer.Write(ch1); writer.Write(ch2); writer.Write(ch3); } } } 注: -> 不用考虑 Flush,也不用调用 Close 方法和 Dispose 方法 -> 使用 using 将需要使用的流包起来,也可以这么写 using(StreamWriter writer = new StreamWriter(file)) { // 写流的操作 } -> 当代码离开 using 范围的时候,会自动调用 Dispose 方法 -> 当调用 Dispose 方法的时候,会自动的调用 Close 方法 -> 调用释放资源的时候,又会自动调用 Fluse 方法
再看“水流”. 水流咱们来看是很形象的了. 因为我们对流动的概念都是来源于流动的 水. 那么看看流水有没有咱们刚刚简单归纳出来的“感觉”呢?显然水是一片流动的,别说 宏观,咱们看到的就是一片,很多的感觉. 而微观上看还是一个个的水分子,一个一个的紧 紧挨着. 显然符合咱们对“感觉”的描述.
实际上,对流的理解,就是这样,一个个小小的东西,但是将很多小小的东西放在一起, 就成了一片东西,再让这些小东西一点点的移动,就看到了一片流动的东西. 这便是流的概 念. 而我们对文件的操作,也是流的一个实现. 将一个文字、字符等看做一个单元,很多这 样的数据就构成一段文本. 要保存这些数据到硬盘中,显然不是像拿桌子上一本书一样那么 简单. 利用流的观点,将数据一个字一个字地从内存中写到硬盘中,就实现保存了. 就好像 看到一个个小小的字符一点点的移动,形成了流.
}
注:
-> 这样就有了一个连接硬盘与内存的通道,并且内存中有了一个缓冲区
-> 对于 FileStream 的构造函数有几点说明
-> 首先其构造函数比较多,但是先记住一个,使用熟练后再查看 MSDN
-> 这里构造函数的第一个参数,表示在硬盘中处理哪个文件
-> 第二个参数是 FileMode,表示硬盘文件的处理方式. 这里是个枚举变量
代码操作写入工作
前面描述的写入方法,实际上就是我们现在要讨论的文件流写入的方法. 显然首先需要
一个连接硬盘与高速缓冲区的连接,可以使用 FileStream 类.
FileStream 类,专门处理文件流的类. 使用前先导入命名空间 Sysytem.IO,或直接写全
名. 在 C#中凡是考虑到输入与输出的一般都在 System.IO 命名空间下. 下面看看如何创建
声明:有些字符串因排版要求换行,正常使用应在前加上“@”,或保持在同一行
文件流
基础篇
要求: 1、了解流操作的原理 2、熟练流操作步骤 3、熟悉文件流 FileStream 和读写流 StreamReader 与 StreamWriter
为什么要流操作 程序的运行,就是在不断的处理数据. 但是数据存储和使用均是在内存中进行,也就
因此代码可以完善一下 static void Main(string[] args) {
FileStream file = new FileStream(@“C:\fileStreamTest.txt”, FileMode.Create, FileAccess.Write);
StreamWriter writer = new StreamWriter(file, Encoding.Default); string str1 = “我”; string str2 = “是”; string str3 = “一”; char ch1 = ‘个’; char ch2 = ‘测’; char ch3 = ‘试’; writer.Write(str1); writer.Write(str2); writer.Write(str3); writer.Flush(); writer.Write(ch1); writer.Write(ch2); writer.Write(ch3); writer.Flush(); writer.Close(); writer.Dispose(); file.Close(); file.Dispose(); } 注: -> 这里调用 StreamWriter 的 Close 方法,关闭流,然后调用 Dispose 方法释放资源 -> 不仅仅 StreamWriter 需要释放资源,FileStream 也需要释放资源 -> 简单的记,带有 Close 方法或 Dispose 方法的就需要手动释放 -> 这里使用的时候有个常见的用法. -> 不用添加 Flush,在释放资源的时候,会自动调用 Fulsh 方法 -> 每次调用 Close 和 Dispose 太麻烦,可以使用 using 将需要释放的代码包起来 -> 修正一下代码为: static void Main(string[] args) { FileStream file =
FileStream 对象,来开辟连接通道.
1、创建 FileStream 对象
static void Main(string[] args) {
FileStream file =
new FileStream(@“C:\fileStreamTest.txt”, FileMode.Create, FileAccess.Write);
那么,将数据保存到硬盘中如何实现?下面咱们看看流对文件的处理.
关于“流” 为什么称为流,想必理解以后,会更加方便的理解文件操作. “流”借鉴了流体的描述.
大家身边接触的流,无非就是人流,水流,流动等. 那么我们将其抽象一下,看看他们之间 有没有什么共同点.
先看“人流”. 有个词叫人流攒动,什么意思呢?就是描述人很多,一个挨一个的移动. 从宏观上看就是一片人海的感觉. 但是仔细一看,就是一个个的人. 可以总结一种感觉就是, 单看就是一个个体,如果总体看就是很多的感觉.
注: -> 该例将三个字符串与三个字符写到流中,并保存到 C 盘 -> 运行改程序,将 C 盘的 fileStreamTest.txt 文件打开,看看有什么结果? -> 可以发现,写到文件中的数据只有”我是一”,而剩下的三个字符没有写进去 -> 为什么?因为没有通知流将数据写到硬盘中. 因此需要在结束的时候调用 Flush 方法 -> (*可以略去)怎么回事儿? -> 实际上 StreamWriter 会将数据每次都 Write 到它的一个私有的字段中 -> 等到缓存满了,或是调用 Flush 的时候,会自动将数据写到流(file)中 -> 流再调用自己的 Flush 方法将数据写到硬盘
关于文件的写入 由于是一个字符一个字符的写到硬盘上,那么在使用过程中有问题了. 硬盘的机械结构
决定了速度与损耗. 频繁的使用硬盘进行读写操作,很显然效率是不高的,另外对硬盘的损 伤也是很大的. 那么怎么处理呢?
在处理时,实际上可以先将硬盘与内存开辟一个连接通道,并在内存中保留一片高速缓
1 / 10
冲区. 然后写入数据的时候,将数据都写到缓冲区中,若缓冲区满了,在一次性写到硬盘, 并清空该缓冲区,继续等待下一次写入. 这样等到写入结束后,再将连接内存与硬盘的通道 关闭.
new FileStream(@“C:\fileStreamTest.txt”, FileMode.Create, FileAccess.Write); StreamWriter writer = new StreamWriter(file, Encoding.Default); using(file) {
是说程序运行时产生的数据,一旦计算机关闭或程序执行结束,数据就会丢失,如果下次还 需要使用就得再次执行计算数据. 显然会比较麻烦.
说得形象一点,例如登 QQ. 很多朋友都有这个印象,登陆 QQ,QQ 界面就会在上一次 关闭的地方展开. 这是为什么呢?因为 QQ 在关闭时,会将当前的信息保存,等到下次再运 行程序的时候,会自动的检测,并加载该数据. 再例如经常用的 word 等办公软件,写好的 数据都是存在硬盘上的. 等到下一次打开还能看,并还能继续写.