该空间包含允许在数据流和文件上进行同步和异步读取及写入的类型。
文件是一些永久存储及特定顺序的字节组成的一个有序的、具有名称的集合,
而流提供一种向后备存储写入字节和从后备存储读取字节的方式。
**********第一部分:下面先介绍该命名空间的类及说明:***********************************************************************
BinaryReader:用特定的编码将基元数据类型读作二进制
BinaryWriter:以二进制形式将基元类型写入流,并支持用特定的编码写入字符串
BufferedStream:给另一个流上的读写操作添加一个缓冲层。无法继承此类
Directory:公开用于创建、移动、枚举、删除目录和子目录的静态方法
DirectoryInfo:公开用于创建、移动、枚举、删除目录和子目录的实例方法,无法继承此类
DriveInfo:提供有关对驱动器的信息的访问
File:提供创建、复制、删除、移动和打开文件的静态方法,并协助创建FileStream对象
FileInfo:提供创建、复制、删除、移动和打开文件的实例方法,并协助创建FileStream对象,无法继承此类
FileStream:公开以文件为主的Stream,支持同步和异步的读写操作
FileSystemInfo:为FileInfo和DirectoryInfo对象提供基类
FileSystemWatcher:侦听文件系统更改通知,并在目录或者目录中的文件发生更改时引发事件
MemoryStream:创建其支持存储区为内存的流
Path:对包含文件或目录路径信息的String实例执行操作。这些操作是以跨平台的方式执行
StreamReader:实现一个TextReader,使其以一种特定的编码从字节流中读取字符
StreamWriter:实现一个TextWriter,使其以一种特定的编码向流中写入字符
StringReader:实现从字符串进行读取的TextReader
StringWriter:实现一个用于将信息写入字符串的TextWriter,该信息存储在基础StringBuilder中
TextReader:表示可连续读取字符系列的读取器
TextWriter:表示可以编写一个有序字符系列的编写器,该类为抽象类
**********第二部分:下面详细介绍其中一些类******************************************************************************
**********
File类和Directory类:这两个类都是对文件和文件夹子操作的类,提供静态方法,都无法继承。
File类的常用方法及说明:
Copy:将现有文件复制到新文件
Create:在指定路径中创建文件
Delete:删除指定的文件。如果指定文件不存在,则不会引发异常
Exists:确定指定的文件是否存在
Move:将指定文件移动到新的位置,并提供指定新文件名的选项
Open:打开指定路径上的FileStream
CreateText:创建或打开一个文件用于写入UTF-8编码的文本
GetCreationTime:返回指定文件或目录的创建的时间
GetLastAccessTime:返回上次访问指定文件或目录的日期和时间
GetLastWriteTime:返回上次写入指定文件或目录的日期和时间
SetCreationTime:设置创建该文件的日期和时间
SetLastAccessTime:设置上次访问指定文件的日期和时间
SetLastWriteTime:设置上次写入指定文件的时间和日期
OpenRead:打开现有文件以进行读取
OpenText:打开现有UTF-8编码文本文件以进行读取
OpenWrite:打开现有文件以进行写入
ReadAllBytes:打开一个文件,将文件的内容读入一个字符串,然后关闭该文件
ReadAllLines:打开一个文本文件,将文件的所有行都读入一个字符串数组,然后关闭该文件
ReadAllText:打开一个文本文件,将文件的所有行读入一个字符串,然后关闭该文件
WriteAllBytes:创建一个新文件,在其中写入指定的字节数组,然后关闭该文件。如果目标文件已存在,则改写该文件
WriteAllLines:创建一个新文件,在其中写入指定的字符串,然后关闭该文件。如果目标文件已存在,则改写该文件
WriteAllText:创建一个新文件,在其中写入内容,然后关闭该文件。如果目标文件已存在,则改写该文件
Replace:使用其他文件的内容替换指定文件的内容,这一过程将删除原始文件,并创建被替换文件的备份
注意:1.由于File类的方法都是静态的,所以如果只想执行一个操作,那么使用File类中的方法效率要比FileInfo中的方法更高;
2.File类中的静态方法都要执行安全检查,因此如果打算多次重用某个对象,可以使用FileInfo类中相应的方法,因为并不总是需要安全检查
**********
Directory类
CreateDirectory:创建指定目录中的所有目录
Delete:删除所有的目录
Exists:确定给定路径是否引用磁盘上的现有目录(验证存在与否)
GetCreationTime:获取目录的创建时间和日期
GetDirectories:获取指定目录中子目录的名称
GetDirectoryRoot:返回指定路径的卷信息、根信息或者两者同时返回
GetFiles:返回指定目录中的文件的名称
GetFileSystemEntries:返回指定目录中文件和子目录的名称
GetLastAccessTime:返回上次访问指定文件或者目录的日期和时间
GetLastWriteTime:返回上次写入指定文件或目录的日期和时间
GetParent:检索指定路径的父目录,包括绝对路径和相对路径
Move:将文件或者目录及其内容移动到新位置
SetCreationTime:为指定的文件或者目录设置创建的日期和时间
SetCurrentDirectory:将应用程序的当前工作目录设置为指定的目录
SetLastAccessTime:设置上次访问指定文件或者目录的日期和时间
SetLastWriteTime:设置上次写入目录的日期和时间
注意:在用Directory类对文件夹进行操作时,文件夹的路径必须正确,否则会引发异常。
**********
FileInfo类和DirectoryInfo
FileInfo类的常用属性及说明:
CreationTime:获取或设置当前FileSystemInfo对象的创建时间
Directory:获取父目录的实例
DirectoryName:获取表示目录的完整路径的字符串
Exists:获取指示文件是否存在值
Extension:获取表示文件扩展名部分的字符串
FullName:获取目录或文件的完整目录
IsReadOnly:获取或设置确定当前文件是否为只读的值
LastAccessTime:获取或设置上次访问文件或目录的时间
LastWriteTime:获取或设置上次写入当前文件或目录的时间
Length:获取当前文件的大小
Name:获取文件名
**********
DirectoryInfo类的常用属性
CreationTime:获取或者设置当前FileSystemInfo对象的创建时间
Exists:获取指示目录是否存在的值
Extension:获取表示文件扩展名部分的字符串
FullName:获取文件或目录的完整目录
LastAccessName:获取或设置上次访问当前目录或文件的时间
LastWriteTime:获取或设置上次写入当前文件或目录的时间
Name:获取DirectoryInfo实例的名称
Parent:获取指定子目录的父目录
Root:获取目录的根部分
**********第三部分:文件/文件夹的基本操作*************************************************************************
静态方法和实例方法相似:
*****
文件基本操作:File和FileInfo
判断文件是否存在:File.Exists(string Path)如果路径为空会引发异常
如果是实例方法则直接 实例.Exists
创建文件:File.Create(string Path);
File.Create(string Path,int bufferSize); bufferSize用于读取和写入文件的已放入缓冲区的字节数
File.Create(string Path,int bufferSize,FileOptions options); options:FileOptions的值之一,它描述如何创建改 写文件
File.Create(string Path,int bufferSize,FileOptions options,FileSecurity fileSecurity); fileSecurity:FileSecurity
的值之一,它确定文件的访问控制和审核安全性
Create方法创建目录时,如果路径为空或者文件夹为只读,则会触发异常.
实例的话: 实例.Create();
复制或移动文件:Copy Move / CoptTo MoveTo
File.Copy(string 源文件名字,string 目标文件名); 目标文件不能是现有文件
File.Copy(string 源文件名字,string 目标文件名字,bool 是否可以改写目标文件);
File.Move(string 原文件名,string 目标文件名字); 如果目标文件已经存在,则会引发异常
实例.CopyTo(string 目标文件名); 返回值是一个完全限定名的新文件(FileInfo型)
实例.CopyTo(string 目标文件名,bool 是否可以改写); 若为true,返回值为新文件,若为false,则引发IO异常
实例.MoveTo(string 目标文件名字);
删除文件:Delete
File.Delete(string Path); 如果删除的文件正在被使用,则会引发异常
实例.Delete();
获取文件信息:
实例化一个FileInfo,然后调用相应的实例方法,上面介绍的很多。
******
文件夹基本操作:Directory和DirectoryInfo
判断文件夹是否存在:Exists
Directory.Exists(string Path); 返回值为bool
实例.Exists;
创建文件夹:
Directory.CreateDirectory(string Path); 返回值为DirectoryInfo
Directory.CreateDirectory(string Path,DirectorySecurity directorySecurity); directorySecurity:要应用于此目录的
访问控制
path参数已存在或者path某些部分无效时则会引发异常。
实例.Create();
实例.Create(DirectorySecurity directorySecurity);
移动文件夹:
需要统一磁盘根目录,意思是只能在同盘操作,我还未试过,先记录一下吧。
Directory.Move(string 原目录名字,string 新位置);
实例.MoveTo(string 目标位置);
删除文件夹:
Directory.Delete(string Path); 删除空文件夹
Directory.Delete(string Path,bool recursive); 若recursive为true,则删除目录所有内容
实例.Delete();
实例.Delete(bool recursive);
遍历文件夹:
DirectoryInfo类提供的 GetDirectories,GetFiles,GetFileSystemInfos方法
GetDirectories 返回当前目录的子目录
public DirectoryInfo[]GetDirectories();
public DirectoryInfo[]GetDirectories(string searchPattern); searchPattern 搜索字符串
public DirectoryInfo[]GetDirectories(string searchPattern,SearchOption searchOption);searchOption:是
SearchOption枚举的一个值,,指定搜索操作是仅包含当前目录还是包含所有子目录
GetFiles 返回当前目录的文件列表
public FileInfo[]GetFiles();
public FileInfo[]GetFiles(string searchPattern);
public FileInfo[]GetFiles(string searchPattern,SearchOption searchOption);
GetFileSystemInfo 返回表示某个目录中所有文件和子目录的FileSystemInfo类型的数组
public FileSystemInfo[]GetFileSystemInfos();
public FileSystemInfo[]GetFileSystemInfos(string searchPattern);
**********第四部分:数据流**********************************************************************************************
流操作:流中的数据可能来自内存,文件或者TCP\IP套接字;
流的基本操作:读取,将数据从流传输到数据结构;
写入,将数据从数据源传输到流中;
查找,查询和修改在流中的位置。
流的类型:.NET Fremework中,流由Stream类来表示,该类构成了所有其他流的抽象类,不能直接创建Stream类的实例,但是必须实现其中的一个类
C#在处理文件输入输出时(I/O)时,最重要的类型为FileStream类,它提供读取和写入文件的方式
*****
文件流类FileStream类公开以文件为主的Stream,它表示在磁盘或网络路径上指向文件的流,一个FileStream类的实例实际代表一个磁盘文件,它通过Seek方法进行对文件的随机访问,也同时包含了流的标准输入,标准输出,标准错误。FileStream默认对文件的打开方式是同步的,但它同样很好的支持异步操作。
*****FileStream类的常用属性和说明:
CanRead:获取一个值,该值指示当前流是否支持读取
CanSeek:获取一个值,该值指示当前流是否支持查找
CanTimeout:获取一个值,该值确定当前流是否可以超时
CanWrite:获取一个值,该值指示指示当前流是否支持写入
IsAsync:获取一个值,该值指示FileStream是异步还是同步打开
Length:获取用字节表示的流长度
Name:获取传递给构造函数的FileStream的名称
Position:获取或设置此流的当前位置
ReadTimeout:获取或设置一个值,该值确定流在超时前尝试读取多长时间
WriteTimeout:获取或设置一个值,该值确定流在超时前尝试写入多长时间
*****FileStream类的常用方法及说明:
BeginRead:开始异步读操作
BeginWrite:开始异步写操作
Close:关闭当前流并释放与之关联的所有资源
EndRead:等待挂起的异步读取完成
EndWrite:结束异步写入,在I/O操作完成之前一直阻止
Lock:允许读取访问的同时防止其他进程更改FileStream
Read:从流中读取字节块并将该数据写入给定的缓冲区中
ReadByte:从文件中读取一个字节,并将读取位置提升一个字节
Seek:将该流的当前位置设置为给定值
SetLength:将该流的长度设置为给定值
Unlock:允许其他进程访问以前锁的某个文件的全部或部分
Write:使用从缓冲区读取的数据将字节块写入该流
WriteByte:将一个字节写入文件流的当前位置
*****使用FileStream类操作文件
首先要实例化一个FileStream对象,其中一个重要的参数是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:指定操作系统应打开现有文件。文件一旦打开,就将被截断为0字节大小。此操作需要
FileIOPermissionAccess.Write。试图从使用Truncate打开的文件中进行读取将导致异常.
**********文本文件的写入和读取
主要通过StreamWriter类和StreamReader类来实现
StreamWriter默认使用UTF-8Encoding编码来进行实例化
该类常用属性以及说明:
Encoding:获取将输出写入到其中的Encoding
Formatprovoder:获取控制格式设置对象
NewLine:获取或设置由当前TextWriter使用的行结束符字符串
常用方法:
Close:关闭当前的StringWriter和基础流
Write:写入到StringWriter的此实例中
WriteLine:写入重载参数指定的某些数据,后跟行结束符
*****同样的,StreamReader类
Close:关闭StringReader
Read:读取输入字符串中的下一个字符或下一组字符
ReadBlock:从当前流中读取最大count的字符并从index开始将数据写入Buffer
ReadLine:从基础字符串中读取一行
ReadToEnd:将整个流或从流的当前位置到流的结尾作为字符串读取
在进行文件读取和写入时,为了方便,我们通常结合使用SaveFileDialog和OpenFileDialog
**********二进制文件的读取和写入
二进制字节流在new的时候,传入FileStream流作为参数
主要是通过BinaryWriter和BinaryReader类来实现
支持将基元类型写入流,并支持用特定的编码写入字符串
BinaryWriter类的常用方法和说明:
Close:关闭当前的BinaryWriter和基础流
Seek:设置当前流中的位置
Write:将值写入当前流
BinaryReader类的常用方法和说明:
Close:关闭当前阅读器和基础流
PeekChar:返回下一个可用字符,并且不提升字节或字符的位置
Read:从基础流中读取字符,并提升流的当前位置
ReadBoolean:从当前流中读取Boolean值,并使该流的当前位置提升一个字节
ReadByte:从当前流中读取下一个字节,并使流的当前位置提升一个字节
ReadBytes:从当前流中将count个字节读入字节数组,并使当前位置提升count个字节
ReadChar:从当前流中读取下一个字符,并根据所使用的Encoding和从流中读取的特定字符,提升流的当前位置
ReadChars:从当前流中读取count个字符,并且以字符数组的形式返回数据,并根据所使用的Encoding和从流中读取的特定字符
,提升当前位置
ReadInt32:从当前流中读取四个字节有符号整数,并使流的当前位置提升4个字节
ReadString:从当前流中读取一个字符串,字符串有长度有前缀,一次将7位编码为整数