FileStreaReder和StreamReader两个类介绍


在.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`在使用完毕后被正确关闭。