在.NET Framework中,`FileStream`和`StreamReader`是用于文件读取操作的两个非常重要的类。它们分别位于`System.IO`命名空间中。下面我将分别介绍这两个类以及它们的用途。
### FileStream 类
`FileStream`类提供了对文件的原始字节流访问。它可以用来创建、打开、关闭、读取和写入文件。
#### 常用构造函数
public FileStream(string path, FileMode mode)
public FileStream(string path, FileMode mode, FileAccess access)
public FileStream(string path, FileMode mode, FileAccess access, FileShare share)
其中:
- `path`:文件路径。
- `mode`:指定如何打开或创建文件,例如`FileMode.Open`, `FileMode.Create`, `FileMode.Append`等。
- `access`:指定文件的访问类型,例如`FileAccess.Read`, `FileAccess.Write`, `FileAccess.ReadWrite`。
- `share`:指定文件是否可以被其他进程共享,例如`FileShare.None`, `FileShare.Read`, `FileShare.Write`, `FileShare.ReadWrite`。
#### 常用方法
- `Read`: 从流中读取一系列字节。
- `Write`: 向流中写入一系列字节。
- `Length`: 获取流的长度。
- `Position`: 获取或设置流中的当前位置。
### StreamReader 类
`StreamReader`类则是在`FileStream`的基础上提供了一层抽象,它支持以文本的形式读取文件,通常用于读取Unicode文本文件。
#### 常用构造函数
public StreamReader(string path)
public StreamReader(string path, Encoding encoding)
public StreamReader(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks)
public StreamReader(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks, int bufferSize)
其中:
- `path`:文件路径。
- `encoding`:指定文件的编码方式,例如`Encoding.UTF8`。
- `detectEncodingFromByteOrderMarks`:如果为`true`,则尝试从文件的开头检测编码。
- `bufferSize`:指定缓冲区大小。
#### 常用方法
- `Read`: 从流中读取下一个字符。
- `ReadLine`: 从流中读取一行直到换行符。
- `ReadToEnd`: 从当前位置读取所有剩余字符,直至流的末尾。
- `Peek`: 返回流中下一个可读字符的值,但不消耗该字符。
### 示例
下面是一个简单的示例,演示如何使用`FileStream`和`StreamReader`来读取一个文本文件:
using System;
using System.IO;
class Program
{
static void Main()
{
string filePath = @"C:\example.txt";
try
{
using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
using (StreamReader reader = new StreamReader(fileStream))
{
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
}
}
catch (Exception ex)
{
Console.WriteLine("Error reading file: " + ex.Message);
}
}
}
在这个例子中,我们首先使用`FileStream`打开文件,然后创建了一个`StreamReader`来读取文件的内容。我们逐行读取文件,并将每一行输出到控制台。
请注意,使用`using`语句可以自动管理资源,确保`FileStream`和`StreamReader`在使用完毕后被正确关闭。