3-4 文件流类FileStream

简介:

3-2  文件流类FileStream

u 本节学习目标:
nFileStream文件流类
nFileStream文件流类的创建
nFileModeFileAccessFileShare方法基本介绍及注意事项
File 类提供的方法在创建或打开文件时,总是会产生一个 FileStream 对象。类 FileStream 是个什么样的类?通过它的对象,怎样完成对文件的操作呢?

1FileStream文件流类简介

FileStream 对象,也称为文件流对象,为文件的读写操作提供通道,而 File 对象相当于提供一个文件句柄,在文件操作中,针对 FileStream 对象的操作必须首先实例化一个 FileStream 类对象后才可以使用,这一点与 File 类的操作是不一样的。
FileStream 类在实例后可以用于读写文件中的数据,而要构造 FileStream 实例,需要以下 4 条信息:
n 要访问的文件。
n 表示如何打开文件的模式 。例如,创建一个新文件或打开一个现有的文件。如果打开一个现有的文件,写入操作是覆盖文件原来的内容,还是添加到文件的末尾?
n 表示访问文件的方式—— 是只读、只写,还是读写?
n 共享访问——表示是否独占访问文件。如果允许其他流同时访问文件,则这些流是只读、只写,还是读写文件?

2FileStream文件流类的创建

创建 FileStream 对象的方式不是单一的,除了用 File 对象的 Create ()方法或 Open ()方法外,也可以采用 FileStream 对象的构造函数。基本创建文件流对象的方法如下:
1)使用File对象的Create方法
       FileStream mikecatstream;
       mikecatstream = File.Create("c:\\mikecat.txt");
   //本段代码的含义:
   //利用类File的Create()方法在C:根目录下创建文件mikecat.txt,并把文件流赋给mikecatstream
2) 使用File对象的Open方法,
      FileStream  mikecatstream;
      mikecatstream = File.Open("c:\\mikecat.txt"FileMode.OpenOrCreate, FileAccess.Write);
      //本段代码的含义:
  //利用类File的Open()方法打开在C:根目录下的文件mikecat.txt,打开的模式为打开或创建,对文件的访问形式为只写,并把文件流赋给mikecatstream。
3) 使用类FileStream的构造函数,
    FileStream  mikecatstream;
    mikecatstream = new FileStream("c:\\mikecat.txt"FileMode.OpenOrCreate, FileAccess.Write);
    //本段代码的含义:
    //利用类FileStream的构造函数打开在C:根目录下的文件mikecat.txt,打开的模式为打开或创建,对文件的访问形式为只写,并把文件流赋给mikecatstream。
FileStream 的构造函数提供了 15 种重载,最常用的有 3 种,如表 3 8 所示:
3-8  FileStream 3 种常用的构造函数
名称
说明
FileStream(string FilePath, FileMode)
使用指定的路径和创建模式初始化 FileStream 类的新实例。
FileStream(string FilePath, FileMode, FileAccess)
使用指定的路径、创建模式和读/写权限初始化 FileStream 类的新实例。
FileStream(string FilePath, FileMode, FileAccess, FileShare)
使用指定的路径、创建模式、读/写权限和共享权限创建 FileStream 类的新实例。
在构造函数中使用的  FilePath, FileMode, FileAccess, FileShare 分别是指:使用指定的路径、创建模式、读 / 写权限和共享权限。其中 FilePath :将封装的文件的相对路径或绝对路径。
下面介绍一下 FileMode FileAccess,FileShare 。它们三个都是 System.IO 命名空间中的枚举类型。如表 3 9 所示:
3-9  枚举类型 FileMode FileAccess,FileShare
名称
取值
说明
FileMode
Append CreateCreateNewOpenOpenOrCreateTruncate
指定操作系统打开文件的方式。
FileAccess
Read ReadWriteWrite
定义用于控制对文件的读访问、写访问或读/写访问的常数。
FileShare
Inheritable NoneReadReadWriteWrite
包含用于控制其他 FileStream 对象对同一文件可以具有的访问类型的常数。
看下面的两个举例:
n 小实验1
FileStream  fstream = new FileStream("Test.cs"FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
//本段代码的含义:
//利用类FileStream的构造函数打开当前目录下的文件Test.cs,打开的模式为打开或创建,对文/的访问形式为读写,共享模式为拒绝共享,并把文件流赋给fstream。
n 小实验2
FileStream  s2 = new FileStream(name, FileMode.Open, FileAccess.Read, FileShare.Read);
//本段代码的含义:
//利用类FileStream的构造函数打开当前目录下的文件名为字符串name的文件,打开的模式为打开,对文件的访问形式为只读,共享模式为读共享,并把文件流赋给s2。
关于 FileMode FileAccess,FileShare 这三个枚举类型值的含义,请参照表 3 10 3 11 3 12 所示:
3-10  枚举类型 FileMode 枚举值的含义
成员名称
说明
Append
打开现有文件并查找到文件尾,或创建新文件。FileMode.Append 只能同 FileAccess.Write 一起使用。任何读尝试都将失败并引发 ArgumentException 
Create
指定操作系统应创建新文件。如果文件已存在,它将被改写。这要求 FileIOPermissionAccess.WriteSystem.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 打开的文件中进行读取将导致异常。
3-11  枚举类型 FileAccess 枚举值的含义
成员名称
说明
Read
对文件的读访问。可从文件中读取数据。同 Write 组合即构成读写访问权。
ReadWrite
对文件的读访问和写访问。可从文件读取数据和将数据写入文件。
Write
文件的写访问。可将数据写入文件。同 Read 组合即构成读/写访问权。
3-12  枚举类型 FileShare 枚举值的含义
成员名称
说明
Delete
允许随后删除文件。
Inheritable
使文件句柄可由子进程继承。Win32 不直接支持此功能。
None
谢绝共享当前文件。文件关闭前,打开该文件的任何请求(由此进程或另一进程发出的请求)都将失败。 
Read
允许随后打开文件读取。如果未指定此标志,则文件关闭前,任何打开该文件以进行读取的请求(由此进程或另一进程发出的请求)都将失败。但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。
ReadWrite
允许随后打开文件读取或写入。如果未指定此标志,则文件关闭前,任何打开该文件以进行读取或写入的请求(由此进程或另一进程发出)都将失败。但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。
Write
允许随后打开文件写入。如果未指定此标志,则文件关闭前,任何打开该文件以进行写入的请求(由此进程或另一进过程发出的请求)都将失败。但是,即使指定了此标志,仍可能需要附加权限才能够访问该文件。 
在打开文件产生文件流的时候,三种枚举类型的不同选值作为参数,会产生不同的操作效果。具体应用应根据实际需要定。
注意:
对于 FileMode ,如果要求的模式与文件的现有状态不一致,就会抛出一个异常。如果文件不存在, Append Open Truncate 会抛出一个异常,如果文件存在, CreateNew 会抛出一个异常。 Create OpenOrCreate 可以处理这两种情况,但 Create 会删除现有的文件,创建一个新的空文件。 FileAccess  FileShare 枚举是按位标志,所以这些值可以与 C# 的按位 OR 运算符 | 合并使用。




本文转自 qianshao 51CTO博客,原文链接:http://blog.51cto.com/qianshao/210953,如需转载请自行联系原作者

目录
相关文章
|
2月前
|
运维 Java Unix
File类和IO流
File类和IO流
39 0
|
5月前
|
存储 安全 编译器
C#中使用I/O文件流
流,即是二进制数值,文件和流 I/O(输入/输出)是指在存储媒介中传入或传出数据。在 .NET 中,System.IO命名空间包含允许以异步方式和同步方式对数据流和文件进行读取和写入操作的类型。这些命名空间还包含对文件执行压缩和解压缩的类型,以及通过管道和串行端口启用通信的类型。命名空间:System.IO程序集:System.Runtime.dll。
46 1
|
8月前
|
存储 移动开发 Java
IO流以及File类
IO流以及File类
|
10月前
项目2(文件流)
项目2(文件流)
|
10月前
项目3(文件流)
项目3(文件流)
|
11月前
|
存储 iOS开发 C++
C++中文件操作与文件流
🐰文件操作与文件流 🏡文件流类和文件流对象 🏡文件的打开与关闭 🌸1.文件的打开 🌸2.文件的关闭 🏡对文本文件的操作 🏡对二进制文件的操作 🌸1.用成员函数write和read操作二进制文件 🌸2.随机访问二进制文件
|
网络协议 Java
FileChannel 文件流的简单使用
FileChannel 文件流的简单使用
135 0
|
存储 Java Unix
09、IO流—File类与IO流(一)
09、IO流—File类与IO流(一)
09、IO流—File类与IO流(一)
|
存储 缓存 Java
09、IO流—File类与IO流(二)
09、IO流—File类与IO流(二)
09、IO流—File类与IO流(二)
C#编程-117:文件流FileStream类
C#编程-117:文件流FileStream类
C#编程-117:文件流FileStream类