C#之I/O系统(三)

来源:互联网 发布:淘宝福建拍卖 编辑:程序博客网 时间:2024/04/30 01:31

(三)文件系统I/O

对于操作系统来说,所有的文件都是面向字节的,而磁盘文件是一种最常见的文件类型。C#中提供了以字节方式读写文件的方法,最常见的方法就是使用字节数据流读写文件,当然我们也能够将这些字节数据流包装在一个基于字符的对象中,使用字符数据流读写文件。

要创建一个附加到文件的字节数据流,我们可以使用FileStream类,由于FileStream类是派生于Stream类的字节数据流类,而对于操作系统来说文件都是面向字节的,所以使用FileStream类可以对一切文件进行读写操作,如可执行文件,目标文件,源文件等。

要读写文件,我们首先应该要知道的是如何去打开和关闭一个文件。FileStream类定义了多个构造函数,常用的有构造函数有以下两种:

FileStream(string path,FileMode mode);

FileStream(string path,FileMode mode,FileAccess access);

FileStream(string path,FileMode mode,FileAccess access,FileShare share);

其中,path指定了文件的完整路径,FileMode是枚举类型,指定了文件的创建模式,FileAccess是枚举类型,指定了文件的读写权限,FileShare是枚举类型,指定了文件的共享属性。下面详细讲述一个各个枚举类型及其值的含义。

FileMode枚举值值说明FileMode.Append把输出附加到文件末尾FileMode.Open打开一个已经存在的文件FileMode.OpenOrCreate打开一个文件,如果不存在,则创建一个新文件FileMode.Create创建一个新的输出文件,已存在的同名文件将被销毁FileMode.CreateNew创建一个新的输出文件,该文件不与已存在的文件同名FileMode.Truncate打开一个已经存在的文件,文件的长度减小为0

FileAccess枚举值值说明FileAccess.Read可读属性FileAccess.Write可写属性FileAccess.ReadWrite可读写属性

FileShare枚举值值说明Delete允许随后删除文件Inheritable使文件句柄可有子进程继承,Win32不直接支持此功能None谢绝共享当前文件,文件关闭前,打开该文件的任何请求(由此进程或另一进程)都将失败Read允许随后打开文件读取,如果未指定此标志,则在文件关闭前,打开该文件进行读取的请求都将失败Write允许随后打开文件写入,如果未指定此标志,则在文件关闭前,打开该文件进行写入的请求都将失败ReadWrite允许随后打开文件读取或写入,如果未指定此标志,则在文件关闭前,打开该文件进行读取或写入的请求都将失败

在打开文件的时候,有可能会出现错误,这时就会抛出异常,常见的异常有IOException类(包含PathTooLongException,DirectoryNotFoundException和FileNotFoundException三个子类异常),ArgumentNullException(文件名为空),ArgumentException(文件名无效),ArgumentOutOfRangeException(模式无效),SecurityException(用户不具有访问权限)。

当我们使用完文件需要将其进行关闭,这时需要调用Close函数,该函数释放分配给文件的系统资源,实际是通过调用Dispose()方法来工作的,Dispose()方法实际的释放资源。

原创粉丝点击