开发中遇到需要读写标准格式文件时,我们可以使用StreamReader和StreamWriter这两个类来完成简单高效的读取,使用起来也非常方便。使用这两个类读写文件需要注意编码格式,默认是UTF8编码,可以通过构造函数重载方法指定编码。
创建StreamReader对象实例:
StreamReader reader = new StreamReader(Path.Combine(path, fileName))
创建StreamWriter对象实例:
StreamWriter writer = new StreamWriter(Path.Combine(path, fileName))
完整参考代码:
class ReadAndWrite
{
public static async Task DemoMain()
{
string path = @"E:Test1";
string fileName = "g.txt";
//写入测试内容
StringBuilder builder = new StringBuilder();
for (int i = 0; i < 10; i++)
{
builder.AppendLine($"{i}--{Guid.NewGuid()}");
}
//目录不存在创建目录
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
await WriteTextAsync(path, fileName, builder);
await ReadTextAsync(path, fileName);
}
///
/// 向指定文件中写入内容
///
/// 目标文件目录
/// 目标文件名称
/// 写入内容
///
static async Task WriteTextAsync(string path, string fileName, StringBuilder stringBuilder)
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
using (StreamWriter writer = new StreamWriter(Path.Combine(path, fileName), true, Encoding.GetEncoding("GBK")))
{
using (StringReader reader = new StringReader(stringBuilder.ToString()))
{
string readText;
while ((readText = await reader.ReadLineAsync()) != null)
{
await writer.WriteLineAsync(readText);
}
}
}
}
///
/// 读取文件内容并输出至控制台
///
///
///
///
static async Task ReadTextAsync(string path, string fileName)
{
using (StreamReader reader = new StreamReader(Path.Combine(path, fileName)))
{
string line;
while ((line = await reader.ReadLineAsync()) != null)
{
Console.WriteLine(line);
}
}
}
}
输出结果:
注意:.Net Core 以后默认不支持 GBK、GB2312等编码,需要添加System.Text.Encoding.CodePages 包后使用。
//按装System.Text.Encoding.CodePages包后加入如下代码 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);



