当前位置:首页 > Windows程序 > 正文

问题:C#打开一个文本文档往里面写数据,没有就新建文档 ;结果:c#FileStrea

2021-03-27 Windows程序

FileStream对象表示在磁盘或网络路径上指向文件的流。这个类提供了在文件中读写字节的方法,但经常使用StreamReader或 StreamWriter执行这些功能。这是因为FileStream类操作的是字节和字节数组,而Stream类操作的是字符数据。字符数据易于使用, 但是有些操作,比如随机文件访问(访问文件中间某点的数据),就必须由FileStream对象执行,稍后对此进行介绍。

还有几种方法可以创建FileStream对象。构造函数具有许多不同的重载版本,最简单的构造函数仅仅带有两个参数,即文件名和FileMode枚举值。

FileStream aFile = new FileStream(filename, FileMode.Member);  

FileMode枚举有几个成员,规定了如何打开或创建文件。稍后介绍这些枚举成员。另一个常用的构造函数如下:

FileStream aFile = new FileStream(filename, FileMode.Member, FileAccess. Member);  

第三个参数是FileAccess枚举的一个成员,它指定了流的作用。FileAccess枚举的成员如表22-6所示。

表  22-6

成  

 

说   

 

Read

 

打开文件,用于只读

 

Write

 

打开文件,用于只写

 

ReadWrite

 

打开文件,用于读写

 

对文件进行不是FileAccess枚举成员指定的操作会导致抛出异常。此属性的作用是,基于用户的身份验证级别改变用户对文件的访问权限。

在FileStream构造函数不使用FileAccess枚举参数的版本中,使用默认值FileAccess. ReadWrite。

FileMode枚举成员如表22-7所示。使用每个值会发生什么,取决于指定的文件名是否表示已有的文件。注意这个表中的项表示创建流时该流指向文件中的位置,下一节将详细讨论这个主题。除非特别说明,否则流就指向文件的开头。

表  22-7

 

成   

 

 

文件不存在

 

Append

 

打开文件,流指向文件的末尾,只能与枚举FileAccess.Write联合使用

 

创建一个新文件。只能与枚举FileAccess.Write联合使用

 

Create

 

删除该文件,然后创建新文件

 

创建新文件

 

CreateNew

 

抛出异常

 

创建新文件

 

Open

 

打开现有的文件,流指向文件的开头

 

抛出异常

 

OpenOrCreate

 

打开文件,流指向文件的开头

 

创建新文件

 

Truncate

 

打开现有文件,清除其内容。流指向文件的开头,保留文件的初始创建日期

 

抛出异常

 

File和FileInfo类都提供了OpenRead()和OpenWrite()方法,更易于创建FileStream对象。前者打开了只读访 问的文件,后者只允许写入文件。这些都提供了快捷方式,因此不必以FileStream构造函数的参数形式提供前面所有的信息。例如,下面的代码行打开了 用于只读访问的Data.txt文件:

FileStream aFile = File.OpenRead("Data.txt");  

注意下面的代码执行同样的功能:

FileInfo aFileInfo = new FileInfo("Data.txt"); FileStream aFile = aFile.OpenRead();  

1. 文件位置

FileStream类维护内部文件指针,该指针指向文件中进行下一次读写操作的位置。在大多数情况下,当打开文件时,它就指向文件的开始位置,但 是此指针可以修改。这允许应用程序在文件的任何位置读写,随机访问文件,或直接跳到文件的特定位置上。当处理大型文件时,这非常省时,因为马上可以定位到 正确的位置。

实现此功能的方法是Seek()方法,它有两个参数:第一个参数规定文件指针以字节为单位的移动距离。第二个参数规定开始计算的起始位置,用SeekOrigin枚举的一个值表示。Seek Origin枚举包含3个值:Begin、Current和End。

例如,下面的代码行将文件指针移动到文件的第8个字节,其起始位置就是文件的第1个字节:

aFile.Seek(8,SeekOrigin.Begin);  

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/68361.html