FileStream文件流类「建议收藏」

FileStream文件流类「建议收藏」主要讲解以下几个方面:1,FileStream文件流类,2,FileStream文件流类的创建,3,FileMode和FileAccess,FileShare方法基本介绍及注意事项用File类提供的方法在创建或打开文件时,总是会产生一个FileStream对象。类FileStream是个什么样的类?通过它的对象,怎样完成对文件的操作呢?1.FileStream文件流类简介F

大家好,又见面了,我是你们的朋友全栈君。

主要讲解以下几个方面:

1,FileStream文件流类,

2,FileStream文件流类的创建,

3,FileMode和FileAccess,FileShare方法基本介绍及注意事项

File类提供的方法在创建或打开文件时,总是会产生一个FileStream对象。类FileStream是个什么样的类?通过它的对象,怎样完成对文件的操作呢?

1.FileStream文件流类简介

FileStream对象,也称为文件流对象,为文件的读写操作提供通道,而File对象相当于提供一个文件句柄,在文件操作中,针对FileStream对象的操作必须首先实例化一个FileStream类对象后才可以使用,这一点与File类的操作是不一样的。

FileStream类在实例后可以用于读写文件中的数据,而要构造FileStream实例,需要以下4条信息:

要访问的文件。

表示如何打开文件的模式。例如,创建一个新文件或打开一个现有的文件。如果打开一个现有的文件,写入操作是覆盖文件原来的内容,还是添加到文件的末尾?

表示访问文件的方式—— 是只读、只写,还是读写?

共享访问——表示是否独占访问文件。如果允许其他流同时访问文件,则这些流是只读、只写,还是读写文件?

2.FileStream文件流类的创建

创建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:将封装的文件的相对路径或绝对路径。

3,下面介绍一下FileMode和FileAccess,FileShare

它们三个都是System.IO命名空间中的枚举类型。如表3-9所示:

表3-9 枚举类型FileMode和FileAccess,FileShare

名称

取值

说明

FileMode

Append、Create、CreateNew、Open、OpenOrCreate和Truncate

指定操作系统打开文件的方式。

FileAccess

Read、ReadWrite和Write

定义用于控制对文件的读访问、写访问或读/写访问的常数。

FileShare

Inheritable、None、Read、ReadWrite和Write

包含用于控制其他 FileStream 对象对同一文件可以具有的访问类型的常数。

看下面的两个举例:

小实验1:

FileStream fstream = new FileStream(“Test.cs”, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);

//本段代码的含义:

//利用类FileStream的构造函数打开当前目录下的文件Test.cs,打开的模式为打开或创建,对文/的访问形式为读写,共享模式为拒绝共享,并把文件流赋给fstream。

小实验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.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 打开的文件中进行读取将导致异常。

表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运算符|合并使用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/162875.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • leetcode 通配符匹配_匹配任意一个字符的通配符是

    leetcode 通配符匹配_匹配任意一个字符的通配符是给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。‘?’ 可以匹配任何单个字符。‘*’ 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例 1:输入:s = “aa”p = “a”输出: false解释: “a” 无法匹配 “aa” 整个字符串。示例 2:输入:s = “aa”p = “*

  • extremeDB_hedging strategy

    extremeDB_hedging strategyeXtremeDB(最短路径最快速的数据管理)eXtremeDB是美国麦科捷科技有限公司(McObjectLLC)开发的一款专业的嵌入式实时内存数据库,它具有高性能,低开销,稳定可靠的极速实时数据管理能力,应用领域有军事/航空航天,网络和电信,工业控制,电子消费/远程信息处理,金融/企业,医疗。核心版本:*eXtremeDB内存版*eXtr…

    2022年10月15日
  • C#酒店管理系统_酒店管理系统免费

    C#酒店管理系统_酒店管理系统免费1.酒店管理系统概要c#实现的酒店管理系统,里面包含了数据库文件,简易酒店管理系统源码,采用WinFrom程序设计开发的酒店管理系统;应用到标准的三层技术,多个视图工具控件;功能介绍用户可根据自己的需求入住登记不同类型的房间,同时登记个人基本信息,管理员可通过对不同类型房间的管理及房间信息管理设置不同的类型房间进行增删改查,并对入住客户的信息及点退房信息查询,并改变房间的入住与退房或空房间的状态信息2.数据库设计由于数据库较多,所以暂时不放出来,下面我们看运行截图3.运行截图

  • 真正解决Windows下UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xff in position 0错误的方法

    真正解决Windows下UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xff in position 0错误的方法问题现象:在Windows下使用Python读文件时,经常遇到UnicodeDecodeError:’gbk’codeccan’tdecodebyte0xffinposition0:illegalmultibytesequence错误。在open函数参数中设置encoding=’utf-8’也不能解决问题,会出现UnicodeDecodeError:’utf-8’codeccan’tdecodebyte0xffinposition0:invalidsta

  • vue中的双向数据绑定原理_vue nodejs

    vue中的双向数据绑定原理_vue nodejs简述    每当面试官问到Vue数据双向绑定原理的时候,我们都会简单的说:Vue内部通过Object.defineProperty方法属性拦截的方式,把data对象里每个数据的读写转化成getter/setter,当数据变化时通知视图更新。虽然一句话把大概原理概括了,但是其内部的实现方式还是值得深究的,本文就以通俗易懂的方式剖析Vue内部双向数据绑定原理的实现过程思路   …

  • 公平洗牌算法_随机洗牌算法

    公平洗牌算法_随机洗牌算法要求:给定一个长度为n的有序数组,要求将其完全打乱,每个元素在任何位置出现的概率均为1/n。随机洗牌算法有好几个,这里讲其中的一个,Fisher-Yatesshuffle算法(时间复杂度为O(n)),其思路如下:(1)从数组中随机选取一个数p。(2)将p与数组中最后(也可以是最前)的元素交换。(如果随机选中的是最后的元素,则相当于没有发生交换)(3)去掉最后的元素(这里并没有删除操作,而是缩小索

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号