File,FileInfo,FileStream 区别与联系概括的说,
File,FileInfo,FileStream 是用于文件 I/O 的类,
StreamReader,StreamWriter 是用于从流读取和写入流的类,使用之前都需 using System.IO。
FileInfo
FileInfo 类继承于 FileSystemInfo 类,它包含下面几个方法与读取文本有关。
FileInfo,查看文件相关的信息,如文件的大小,名称、创建事件、修改时间、后缀、是否只读等,
同时可以进行创建、拷贝、移动、删除文件。
方法 返回值
AppendText() StreamWriter
Create() FileStream
CreateText() StreamWriter
Open(FileMode mode) FileStream
Open(FileMode mode, FileAccess access) FileStream
Open(FileMode mode, FileAccess access, FileShare share) FileStream
OpenRead() FileStream
OpenText() StreamReader
OpenWrite() FileStream
文本操作之前,首先使用构造函数 FileInfo(string fileName),创建一个 FileInfo 对象,构造函数的参数是文件名称,包含路径。在写文本的时候,先确定文本是否存在,如果存在的话,可以使用AppendText(),进行文本添加;如果不存在,则需要创建文本,就需要用到 Create()和 CreateText()两个方法。CreateText()返回值是 StreamWriter,可以把 CreateText()返回值赋给一个 StreamWriter对象,利用 StreamWriter 的 void Write(string value)或者 void Writeline(string value)方法来写进文本;Create()的返回值是 FileStream,可以把 Create()返回值赋给一个FileStream 对象,然后可以利用 FileStream 的写操作 void Write(byte[] array, int offset, int count)来进行写文本,此方法中第一个参数需要把一般的字符串转为字节数组,用 byte[] info = new UTF8Encoding(true).GetBytes(value),就可以得到第一个参数值。
在读文本操作时,可以用 open 几个方法,对于参数 FileMode 是枚举类型,
CreateNew = 1,
Create = 2,
Open = 3,
OpenOrCreate = 4,
Truncate = 5,
Append = 6
参数FileAccess是枚举类型,
Read = 1,
Write = 2,
ReadWrite = 3
参数 FileShare 是枚举类型,
None = 0,
Read = 1,
Write = 2,
ReadWrite = 3,
Delete = 4,
Inheritable = 16
返回值类型一种使 FileStream,另外一种是StreamReader,获取对象之后,可用这两种对象的读文件方法对文本进行读取。
File 类
File 类所包含的与读写文本有关的方法如下表所示;
File.ReadAllBytes //读取所有字节
File.ReadAllLines //读取所有行,用于读取文本文件
File.ReadAllText //读取所有内容,用于读取文本文件
File.WriteAllBytes //写入所有字节
File.WriteAllLines //写入所有行,用于读取文本文件
File.WriteAllText //写入所有内容,用于读取文本文件
方法名 返回值
AppendAllText(string path, string contents) void
AppendAllText(string path, string contents, Encoding encoding) void
AppendText(string path) StreamWriter
Create(string path) FileStream
Create(string path, int bufferSize) FileStream
Create(string path, int bufferSize, FileOptions options) FileStream
Create(string path, int bufferSize, FileOptions options, FileSecurity fileSecurity) FileStream
CreateText(string path) StreamWriter
Open(string path, FileMode mode) FileStream
Open(string path, FileMode mode, FileAccess access) FileStream
FileStreamOpen(string path, FileMode mode, FileAccess access, FileShare share) FileStream
OpenRead(string path) FileStream
OpenText(string path) StreamReader
OpenWrite(string path) FileStream
对于该类的前三个添加文本方法,参数不同,AppendAllText(string path, string contents)和
AppendAllText(string path, string contents, Encoding encoding),返回值都是 void,这两个方法直接添加 contents 所代表的内容,对于AppendText(string path)方法,需要创建一个StreamWriter 对象来获取该方法的返回值,通过 StreamWriter 对象的写操作,进行文本的添加。
同样,在写文本的时候,有两种返回值的方法,一个返回值是 FileStream,一个返回值是StreamWriter,通过 create(0 方法,可以创建指定路径下的文本文件,创建完成后,再利用返回值类型的对象的相关写方法进行写文件操作。
读文本操作和 FileInfo 类相类似。
FileStream 类
公开以文件为主的 Stream,既支持同步读写操作,也支持异步读写操作。
使用 FileStream 类对文件系统上的文件进行读取、写入、打开和关闭操作,并对其他与文件相关的操作系统句柄进行操作,如管道、标准输入和标准输出。读写操作可以指定为同步或异步操作。FileStream 对输入输出进行缓冲,从而提高性能。
FileStream 对象支持使用 Seek 方法对文件进行随机访问。Seek 允许将读取/写入位置移动到文件中的任意位置。这是通过字节偏移参考点参数完成的。字节偏移量是相对于查找参考点而言的,该参考点可以是基础文件的开始、当前位置或结 ,分别由 SeekOrigin 类的三个属性表示。
FileStream ,以字节流的方式进行文件的读写,通常用于大文件(二进制文件)的读写,常用方法如下:
int FileStream.Read(byte[] array,int offset,int count)
void FileStream.Write(byte[] array,int offset,int count)
FileStream 类读写文本主要依靠两个方法,void Write(byte[] array, int offset, int count)和 Int Read(byte[] array, int offset, int count),分别用一个例子来说明这两个方法的使用。
读文本:
using (FileStream fs = File.OpenRead(path))
{
byte[] b = new byte[1024];
UTF8Encoding temp = new UTF8Encoding(true);
while (fs.Read(b,0,b.Length) > 0)
{
Console.WriteLine(temp.GetString(b));
}
}
写文本(异步):
FileStream fs=new FileStream("c:\\Variables.txt", FileMode.Append, FileAccess.Write, FileShare.Write);
fs.Close();
StreamWriter sw=new StreamWriter("c:\\Variables.txt", true, Encoding.ASCII);
string NextLine="This is the appended line.";
sw.Write(NextLine);
sw.Close();
写文本(同步):
byte[] info = new UTF8Encoding(true).GetBytes(value);
fs.Write(info, 0, info.Length);
StreamReader 和 StreamWriter
StreamReader和StreamWriter,通常用于对文本文件的读写,使用这个的好处时不同的文本文件有不同的编码格式,SteamReader会帮助我们自动处理,StreamWriter也可以指定写入文本的编码方式。
TextReader 是 StreamReader 和 StringReader 的抽象基类。抽象 Stream 类的实现用于字节输入和输出,而 TextReader 的实现用于 Unicode 字符输出。
TextWriter 是 StreamWriter 和 StringWriter 的抽象基类。抽象 Stream 类的实现用于字节输入和输出,而 TextWriter 的实现用于 Unicode 字符输出
StreamReader 和 StreamWriter 是用于从流读取和写入流的类
StreamReader.read 读取一个字符
StreamReader.ReadLine 读取一行
StreamReader.ReadToEnd 读取所有内容
StreamWriter.Write 写入文本,可以写入多种类型的文本