Download presentation
Presentation is loading. Please wait.
Published byIne Haraldsen Modified 5年之前
2
文件流
3
文件流 Stream FileStream BufferedStream MemoryStream NetworkStream ……
所有流的抽象 Stream FileStream BufferedStream MemoryStream NetworkStream ……
4
文件流 FileStream FileName FileMode FileAccess FileShare
5
FileMode 成员名称 说明 Append
打开现有文件并查找到文件尾,或创建新文件。FileMode.Append 只能同 FileAccess.Write 一起使用。任何读尝试都将失败并引发 ArgumentException。 Create 指定操作系统应创建新文件。如果文件已存在,它将被改写。这要求 FileIOPermissionAccess.Write。System.IO.FileMode.Create 等效于这样的请求:如果文件不存在,则使用 CreateNew;否则使用 Truncate。 CreateNew 指定操作系统应创建新文件。此操作需要 FileIOPermissionAccess.Write。如果文件已存在,则将引发 IOException。 Open 指定操作系统应打开现有文件。打开文件的能力取决于 FileAccess 所指定的值。如果该文件不存在,则引发 System.IO.FileNotFoundException 。 OpenOrCreate 指定操作系统应打开文件(如果文件存在);否则,应创建新文件。如果用 FileAccess.Read 打开文件,则需要 FileIOPermissionAccess.Read。如果文件访问为 FileAccess.Write 或 FileAccess.ReadWrite,则需要 FileIOPermissionAccess.Write。如果文件访问为 FileAccess.Append,则需要 FileIOPermissionAccess.Append。 Truncate 指定操作系统应打开现有文件。文件一旦打开,就将被截断为零字节大小。此操作需要 FileIOPermissionAccess.Write。试图从使用 Truncate 打开的文
6
FileAccess Read 打开文件,用于只读 Write 打开文件,用于只写 ReadWrite 打开文件,用于读写
7
FileShare 成员名称 说明 Delete 允许随后删除文件。 Inheritable
允许随后删除文件。 Inheritable 使文件句柄可由子进程继承。Win32 不直接支持此功能。 None 谢绝共享当前文件。文件关闭前,打开该文件的任何请求(由此进程或另一进程发出的请求)都将失败。 Read 允许随后打开文件读取。如果未指定此标志,则文件关闭前,任何打开该文件以进行读取的请求(由此进程或另一进程发出的请求)都将失败。但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。 ReadWrite 允许随后打开文件读取或写入。如果未指定此标志,则文件关闭前,任何打开该文件以进行读取或写入的请求(由此进程或另一进程发出)都将失败。但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。 Write 允许随后打开文件写入。如果未指定此标志,则文件关闭前,任何打开该文件以进行写入的请求(由此进程或另一进过程发出的请求)都将失败。但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。
8
FileStream常用方法 名称 说明 Read 从流中读取字节块并将该数据写入给定缓冲区中。 ReadByte
从文件中读取一个字节,并将读取位置提升一个字节。 Write 使用从缓冲区读取的数据将字节块写入该流。 WriteByte 将一个字节写入文件流的当前位置。
9
FileStream示例 //创建一个文件流
FileStream fs = new FileStream("c:\\MyFile.txt", FileMode.Create); //将字符串的内容放入缓冲区 string str = "Welcome to the Garden!"; byte[] buffer = new byte[str.Length]; for (int i = 0; i < str.Length; i++) buffer[i] = (byte)str[i]; //写入文件流 fs.Write(buffer, 0, buffer.Length); StringBuilder sb = new StringBuilder(); //定位到流的开始位置 fs.Seek(0, SeekOrigin.Begin); //读取流中前7个字符 for (int i = 0; i < 7; i++) sb.Append((char)fs.ReadByte()); //显示读取的信息和流的长度 Console.WriteLine("读取内容为:{0}", sb.ToString()); Console.WriteLine("文件长度为:{0}", fs.Length); //关闭文件流 fs.Close();
10
数据流
11
数据流 TextReader BinaryReader StreamReader StringReader
12
数据流 StreamReader Read ReadBlock ReadLine ReadToEnd
13
StreamReader示例 //程序清单P16_5.cs: using System; using System.IO;
namespace P16_5 { class BaseStreamSample static void Main() StreamReader sr = new StreamReader("c:\\MyFile.txt"); Console.WriteLine("CanRead: {0}", sr.BaseStream.CanRead); Console.WriteLine("CanWrite: {0}", sr.BaseStream.CanWrite); sr.Close(); StreamWriter sw = new StreamWriter("c:\\MyFile.txt"); Console.WriteLine("CanRead: {0}", sw.BaseStream.CanRead); Console.WriteLine("CanWrite: {0}", sw.BaseStream.CanWrite); sw.Close(); }
14
数据流 BinaryReader Read ReadByte(s) / ReadChar(s) / ReadString
ReadBoolean ReadInt16/32/64 / ReadUInt16/32/64 ReadSingle / ReadDouble / ReadDecimal
15
数据流 TextWriter BinaryWriter StreamWriter StringWriter
16
数据流 StreamWriter Write WriteLine Demo P348
17
数据流 BinaryWriter Write Demo P349
18
FileStream与StreamReader比较
1. FileStream是一个较为底层的类,只能简单地读文件到缓存区,而StreamReader封装了一些高级方法如ReadLine() 2. FileStream可读可写,而StreamReader只能读不能写 3. FileStream不能指定编码(因为它看到的只是文件的二进制形式,当然无所谓编码),而StreamReader可以指定编码,一旦指定就不允许再更改,因此编码指定是放在它的构造方法里的。默认编码为System.Text.UTF8Encoding,实际上,在StreamReader的构造方法里,它会对文件进行编码检查,当然也可以不让它检查。 4. 若对是对二进制文件进行操作,最好使用BinaryReader,若要进行写操作,则用StreamWriter,同样StreamWriter也能按指定的编码进行读写 5. StreamReader的构造方法不一定需要FileStream,只需要文件名即可 6. StreamReader关闭后,与之相关的FileStream没有关闭,(通过FileStream的CanRead的测试)
Similar presentations