FileStream类
使用FileStream能够对对系统上的文件进行读、写、打开、关闭等操作。并对其他与文件相关的操作系统提供句柄操作,如管道,标准输入和标准输出。读写操作可以指定为同步或异步操作。FileStream对输入输出进行缓冲,从而提高性能。
FileStream 对象支持使用 Seek 方法对文件进行随机访问。Seek 允许将读取/写入位置移动到文件中的任意位置。这是通过字节偏移参考点参数完成的。字节偏移量是相对于查找参考点而言的,该参考点可以是基础文件的开始、当前位置或结尾,分别由 SeekOrigin 类的三个属性表示。
FileStream会自动缓冲数据,通过Flush()能够强制输出缓冲区中的数据。FileStream和其他流都会占用不在.net管理范围的资源,因此FileStream在使用完成之后应该调用Dispose()方法或者通过using关键字调用。Dispose()方法会调用Close()方法,Close()方法会调用Flush()方法。这就是为什么在释放资源前,会自动输出缓冲区内的数据。
FileStream中用到了好几个枚举,因此有必须对这些枚举的有一定的了解,首先先来看看FileMode枚举,FileMode枚举是一个简单枚举,用于指定操作系统打开文件的方式。更详细请查看:http://www.cnblogs.com/kissdodog/archive/2013/01/19/2868125.html

枚举成员 成员值 描述 CreateNew 1 指定操作系统应创建新文件,如果文件存在则引发异常。
Create 2 指定操作系统创建新文件,如果文件已存在则覆盖之。
OPen 3 指定 操作系统应打开现有文件,如果文件不存在则抛出异常。
OpenOrCreate 4 指定操作系统应打开文件,如果文件不存在则创建之。
Truncate 5 指定操作系统打开现有文件,如果文件已存在则清空,从Truncate打开的文件中读取将引发异常。
Append 6 若文件存在,则找到文件并找到文件结尾,或者创建一个新文件。

再下来是FileAccess枚举,FileAccess用于控制对文件的读访问、写访问或读/写访问的常熟。从源代码可以看到FileAccess是一个简单枚举。
枚举成员 成员值 描述 Read 1 对文件的读访问,拥有读取权限。
Write 2 对文件的写访问,拥有写入权限。
ReadWrite 3 对文件的读访问和写访问,拥有读取和写入两个权限。
一、构造函数
FileStream的构造函数居然有15个之多。总之就是new就行了。
二、公共属性
CanRead 获取一个值,该值指示当前流是否支持读取。
CanSeek 获取一个值,该值指示当前流是否支持查找。
CanTimeout 获取一个值,该值确定当前流是否可以超时。(从 Stream 继承。)
CanWrite 获取一个值,该值指示当前流是否支持写入。
Handle 获取当前 FileStream 对象所封装文件的操作系统文件句柄。
IsAsync 获取一个值,该值指示 FileStream 是异步还是同步打开的。
Length 获取用字节表示的流长度。
Name 获取传递给构造函数的 FileStream 的名称。
Position 获取或设置此流的当前位置。
ReadTimeout 获取或设置一个值,该值指示尝试读取多长时间后超时。
SafeFileHandle 获取 SafeFileHandle 对象,该对象表示当前 FileStream 对象封装的文件的操作系统文件句柄。
WriteTimeout 获取或设置一个值,该值确定流在超时前尝试写入多长时间。 (从 Stream 继承。)
三、公共方法
BeginRead 已重写。 开始异步读。
BeginWrite 已重写。 开始异步写。
Close 关闭当前流并释放与之关联的所有资源(如套接字和文件句柄)。 (从 Stream 继承。)
CreateObjRef 创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。 (从 MarshalByRefObject 继承。)
Dispose 已重载。释放流所占用的资源。
EndRead 已重写。 等待挂起的异步读取完成。
EndWrite 已重写。 结束异步写入,在 I/O 操作完成之前一直阻止。
Flush 已重写。 清除该流的所有缓冲区,使得所有缓冲的数据都被写入到基础设备。
GetAccessControl 获取 FileSecurity 对象,该对象封装当前 FileStream 对象所描述的文件的访问控制列表 (ACL) 项。
GetLifetimeService 检索控制此实例的生存期策略的当前生存期服务对象。 (从 MarshalByRefObject 继承。)
InitializeLifetimeService 获取控制此实例的生存期策略的生存期服务对象。 (从 MarshalByRefObject 继承。)
Lock 允许读取访问的同时防止其他进程更改 FileStream。
Read 已重写。 从流中读取字节块并将该数据写入给定缓冲区中。
ReadByte 已重写。 从文件中读取一个字节,并将读取位置提升一个字节。
Seek 已重写。 将该流的当前位置设置为给定值。
SetAccessControl 将 FileSecurity 对象所描述的访问控制列表 (ACL) 项应用于当前 FileStream 对象所描述的文件。
SetLength 已重写。 将该流的长度设置为给定值。
Synchronized 在指定的 Stream 对象周围创建线程安全(同步)包装。 (从 Stream 继承。)
Unlock 允许其他进程访问以前锁定的某个文件的全部或部分。
Write 已重写。 使用从缓冲区读取的数据将字节块写入该流。
WriteByte 已重写。 将一个字节写入文件流的当前位置。
以下给出代码示例(注意using或Dispose(),此处略过了):

FileStream fs = new FileStream(@"E:\file.txt", FileMode.Create); //打开一个写入流
Console.WriteLine(fs.CanRead); //该属性值指示文件是否可读 True
Console.WriteLine(fs.CanSeek); //该属性值指示文件是否支持查找 True
Console.WriteLine(fs.CanTimeout); //该属性值指示文件是否支持超时 False
Console.WriteLine(fs.CanWrite); //该属性值指示文件是否可写 True
Console.WriteLine(fs.IsAsync); //该属性值指示文件是否是异步打开,异步打开则返回true,同步打开则返回false False
Console.WriteLine(fs.Length); //获取用字节流表示的长度 16 与硬盘中显示的大小一样。
Console.WriteLine(fs.Name); //获取传递给构造函数的文件名称 E:\file.txt
Console.WriteLine(fs.Position); //获取和设置此流的当前位置,注意此方法是可赋值设置的。 0 fs.Position = 100;
//Console.WriteLine(fs.ReadTimeout); //获取和设置一个值,该值指示尝试读取多长时间后超时,可以赋值超时,如果流上不支持超时(即fs.CanTimeout为false)则引发异常。
//Console.WriteLine(fs.WriteTimeout); //获取和设置一个值,尝试写入多长时间后算超时。如果不支持超时(即fs.CanTimeout为false)则引发异常。 //写入流
string str = "你好吗?";
byte[] bytes = Encoding.UTF8.GetBytes(str);
fs.Write(bytes, 0, bytes.Length);
fs.Flush(); //流会缓冲,此行代码指示流不要缓冲数据,立即写入到文件。
fs.Close(); //关闭流并释放所有资源,同时将缓冲区的没有写入的数据,写入然后再关闭。
fs.Dispose(); //释放流所占用的资源,Dispose()会调用Close(),Close()会调用Flush(); 也会写入缓冲区内的数据。 //写入流,追加文本
FileStream fs = new FileStream(@"E:\file.txt", FileMode.Append, FileAccess.Write); //追加流,权限设置为可写
byte[] bytes = Encoding.UTF8.GetBytes("好想回家过年了!");
fs.Write(bytes, 0, bytes.Length);
fs.Flush(); //E:\file.txt文本变为 你好吗?好想回家过年了! 原来文本的内容是:你好吗? //写入流,逐个字符逐个字符吸入
FileStream fs = new FileStream(@"E:\tianyi.txt", FileMode.CreateNew, FileAccess.Write); //在E盘下创建了E:\tianyi.txt并写入 天意啊!
byte[] bytes = Encoding.UTF8.GetBytes("天意啊!");
foreach (byte b in bytes)
{
fs.WriteByte(b); //逐个字节逐个字节追加入文本
}
fs.Flush(); //读取内容
FileStream fs1 = new FileStream(@"E:\file.txt", FileMode.Open, FileAccess.Read, FileShare.Read);
byte[] bytes = new byte[fs1.Length];
fs1.Read(bytes, 0, fs1.Length);
Console.WriteLine(Encoding.UTF8.GetString(bytes)); //将读取到的值获取成字符串输出 //逐个字符读取
FileStream fs = new FileStream(@"E:\file.txt", FileMode.Open, FileAccess.ReadWrite);
byte[] bytes = new byte[fs.Length];
for (int i = 0; i < fs.Length; i++)
{
bytes[i] = (byte)fs.ReadByte(); //逐个字节逐个字节的读取,当读取完之后会自动将当前读取位置移动到下一位
}
Console.WriteLine(Encoding.UTF8.GetString(bytes)); //输出E:\file.txt的文本内容 "你好吗" //未明白的东西
//fs.Handle
//fs.SafeFileHandle
//CreateObjRef
//GetAccessControl
//GetLifetimeService
//InitializeLifetimeService
//SetAccessControl
//Synchronized

FileStream类的更多相关文章
- .net学习之集合、foreach原理、Hashtable、Path类、File类、Directory类、文件流FileStream类、压缩流GZipStream、拷贝大文件、序列化和反序列化
1.集合(1)ArrayList内部存储数据的是一个object数组,创建这个类的对象的时候,这个对象里的数组的长度为0(2)调用Add方法加元素的时候,如果第一次增加元神,就会将数组的长度变为4往里 ...
- FileStream类的使用(文件流)
1.什么是FileStream类 FileStream 类对文件系统上的文件进行读取.写入.打开和关闭操作,并对其他与文件相关的操作系统句柄进行操作,如管道.标准输入和标准输出.读写操作可以指定为同步 ...
- 07.使用FileStream类来实现对大文件的复制
namespace _20.使用FileStream类来实现多媒体文件的复制 { class Program { static void Main(string[] args) { //需要被复制的文 ...
- 06.FileStream类的学习
//FileStream类是用来操作字节的,也就是可以操作所有文件. 因为所有的文件都是以字节形式来存储的. //StreamReader类和StreamWriter类是用来操作字符的. FileSt ...
- 文件读写(三)利用FileStream类操作字节数组byte[]、BinaryFormatter、内存流MemoryStream
一.Stream类概述 在.NET Framework中,文件和流是有区别的.文件是存储在磁盘上的数据集,它具有名称和相应的路径.当打开一个文件并对其进行读/写时,该文件就称为流(stream).但是 ...
- c#语言 中FileStream类的基本使用
FileStream类不是静态类,使用时需要创建对象,FileStream类既可以对文本文件进行读也可以对多媒体文件进行写,以字节数组的形式进行读和写,多用于对大文件进行读写,区别于File类的是它对 ...
- 【C# IO 操作】 Path 路径类 |Directory类 |DirectoryInfo 类|DriveInfo类|File类|FileInfo类|FileStream类
Directory类 Directory类 是一个静态类,常用的地方为创建目录和目录管理. 一下来看看它提供的操作. 1.CreateDirectory 根据指定路径创建目录.有重载,允许一次过创建多 ...
- asp.net中用FileStream类实现下载文件功能,自定义下载路径,像IE下载一样
方法一: //这个值可以从配置文件读取,或者放个textbox让用户填 string path = "你的路径";FileStream outputStream = new Fil ...
- FileStream类操作文件
private void buttonselect_Click (object sender, EventArgs e) { OpenFileDialog ofd ...
随机推荐
- IQC IPQC FQC OQC QA QE SQE CQS QM 简介区别
IQC Incoming quality control 来料质量控制.是企业产品过程质量的第一关,在这个部门工作的同事最主要的是要注意文件和资料,即:图纸 样品承认书 样板 ***配件检验规范 ,还 ...
- Linux备份与恢复
确定要备份的内容 在备份和还原系统时,Linux 基于文件的性质成了一个极大的优点.在 Windows 系统中,注册表与系统是非常相关的.配置和软件安装不仅仅是将文件放到系统上.因此,还原系统就需要有 ...
- jquery第六期:位置选择器
<html> <head> <script type="text/javascript" src="jquery-1.10.1.js&quo ...
- Android下的SQLite数据库的相关操作及AndroidTestCase测试
一:创建数据库 package com.itcode.mysqlite; import android.content.Context; import android.database.sqlite. ...
- windows phone之获取当前连接WIFI的SSID
public string GetSSIDName() { foreach (var network in new NetworkInterfaceList()) { if ( (network.In ...
- Java迭代器深入理解及使用
Iterator(迭代器) 作为一种设计模式,迭代器可以用于遍历一个对象,对于这个对象的底层结构开发人员不必去了解. java中的Iterator一般称为“轻量级”对象,创建它的代价是比较小的.这里笔 ...
- jquery 弹出框 showDialog.js具体用法
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABWwAAAImCAIAAABID1T7AAAgAElEQVR4nO3d329c52Hgff1HvPCNLw
- Apache POI组件操作Excel,制作报表(二)
本文接上一篇继续探究POI组件的使用. 现在来看看Excel的基本设置问题,以2007为例,先从工作簿来说,设置列宽,因为生成表格列应该固定,而行是遍历生成的,所以可以在工作簿级别来设置列宽, ...
- (转)Tomcat 7 访问 Manager 和 Host Manager
配置好 Tomcat 7.0 后,在 tomcat-users.xml 中配置用户角色来访问 localhost:8080 的这样三个按钮总出现问题: Server Status Manager Ap ...
- Android防止内存泄漏以及MAT的使用
Android发生内存泄漏最普遍的一种情况就是长期保持对Context,特别是Activity的引用,使得Activity无法被销毁.这也就意味着Activity中所有的成员变量也没办法销毁.本文仅介 ...