- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE
PAGE 7-38
流、文件及基于文本的应用
与外部设备和其他计算机进行交流的输入输出操作,尤其是对磁盘的文件操作,是计算机程序重要而必备的功能,本章中介绍流式输入输出、文件及目录管理,并介绍基于文本的应用的一些问题。
7.1 流及二进制输入输出
7.1.1 流
为进行数据的输入/输出操作,C#中把不同的输入/输出源(键盘、文件、网络连接、内存等)抽象表述为“流”(stream)。Stream类是抽象类,它有三个重要的子类,分别针对的是不同的存取对象:FileStream类表示文件操作,MemoryStream表示内存操作,BufferedStream表示缓冲处理。
需要说明的是,尽管System.Net.Sockets.NetworkStream类并不属于System.IO名字空间,但该类也可以通过使用网络sockets执行基于流的I/O。
1.Stream类
抽象的Stream类包含了流中所需要的许多属性和操作,如 REF _Re\h 表 71和 REF _Re\h 表 72所示。
表 STYLEREF 1 \s 7 SEQ 表 \* ARABIC \s 1 1 Stream类的属性
属 性 描 述 CanRead 如果当前流支持读操作,该属性为true CanSeek 如果当前流支持搜索操作,该属性为trueCanWrite如果当前流支持写操作,该属性为true Length 返回以字节数表示的流长度 Position返回支持搜索操作的流的当前位置 表 STYLEREF 1 \s 7 SEQ 表 \* ARABIC \s 1 2 Stream类中的一些重要方法
方 法 描 述 BeginRead,EndRead 异步读操作的开始和结束BeginWrite,EndWrite异步写操作的开始和结束Close 流的关闭 Flush 流的刷新 Read 从流中读出一个字节序列ReadByte 从流中读出一个字节 Seek 设定流内部的位置 SetLength 设定流的长度 Write 向流中写入一个字节序列WriteByte ??流中写入一个字节 这些属性和方法中涉及了流的读写的各个方面。
读写操作的4个方法如下:
int ReadByte();
int Read(byte[] array, int offset, int count );
void WriteByte( byte value );
void Write(byte[] array, int offset, int count );
其中ReadByte()将读入的字节转成整数并返回,如果没有读到字节,则返回-1。Read()方法返回的所读字节的数目。
通过BeginRead()、EndRead()、BeginWrite()和EndWrite()等方法,Stream类可以支持异步I/O操作。
需要解释的是Seek()方法,它表示在流中对搜索指针进行定位,用来决定下一步的读或写操作的位置。在这样的流中,其CanSeek属性值为true,并且可以使用其Seek()方法来设定指针的位置。Seek()方法需要两个参数:用来表示搜索指针移动距离的数值以及用来确定指针移动的参照位置。参照位置是SeekOrigin的枚举成员,可以是下面3种情况之一:
SeekOrigin.Begin(文件的开头)
SeekOrigin.Current(文件中指针的当前位置)
SeekOrigin.End(文件的结尾)
下面的代码展示了如何在文件中进行搜索处理:
aStream.Seek(200, SeekOrigin.Begin); //从开头移到200位置
aStream.Seek(0, SeekOrigin.End); //移到文件尾
aStream.Seek(-20, SeekOrigin.Current); //从当前位置反向移动20
2.FileStream类
Fil
文档评论(0)