C# StreamWriter 写入字符串完整示例
C# StreamWriter 写入字符串完整示例
一、核心方法:Write / WriteLine
Write("文本"):写入字符串,不自动换行WriteLine("文本"):写入字符串并自动追加换行符\r\n
必须使用 using 包裹 StreamWriter,自动释放文件流,避免文件占用。
二、基础写法(覆盖原有文件)
第二个参数 append: false,文件存在则清空重写:
using System.IO;
using System.Text;
// 1. 创建写入对象,覆盖模式,默认UTF8带BOM
using (StreamWriter sw = new StreamWriter("demo.txt", append: false))
{
// 不换行写入字符串
sw.Write("第一部分内容");
sw.Write("紧跟在上一行后面");
// 带换行写入字符串
sw.WriteLine(); // 空一行
sw.WriteLine("单独一行字符串");
sw.WriteLine("第二行文字");
}
三、追加字符串(在文件末尾续写)
append: true,保留原有内容,末尾新增字符串:
string filePath = "demo.txt";
using (StreamWriter sw = new StreamWriter(filePath, append: true))
{
sw.WriteLine("=== 追加的新字符串 ===");
sw.WriteLine("今天写入的文本");
}
四、写入时指定编码(解决中文乱码)
带中文推荐显式指定编码,构造函数第三个参数传 Encoding:
// UTF8无BOM(通用、网页/程序读取不乱码)
Encoding utf8NoBom = new UTF8Encoding(false);
using (StreamWriter sw = new StreamWriter("demo.txt", false, utf8NoBom))
{
sw.WriteLine("中文测试字符串:张三、数据记录");
sw.Write("连续文字");
}
五、拼接变量字符串写入
支持插值字符串、拼接字符串直接传入:
string name = "李四";
int age = 25;
using var sw = new StreamWriter("user.txt", false);
// 插值字符串
sw.WriteLine($"姓名:{name},年龄:{age}");
// 普通拼接
sw.Write("用户信息:" + name + " | " + age);
六、批量循环写入多行字符串
只创建一次 StreamWriter,性能远高于 File.AppendAllText:
string[] textList = { "第一条记录", "第二条记录", "第三条记录" };
using (StreamWriter sw = new StreamWriter("list.txt", false))
{
foreach (string str in textList)
{
sw.WriteLine(str);
}
}
七、异步写入字符串(UI程序防卡顿)
using System.Threading.Tasks;
static async Task WriteStringAsync()
{
using (StreamWriter sw = new StreamWriter("async.txt", false))
{
await sw.WriteLineAsync("异步写入字符串第一行");
await sw.WriteAsync("异步不换行文本");
await sw.FlushAsync(); // 强制缓冲区写入磁盘
}
}
八、关键注意点
- 必须 using:不手动释放会导致文件被进程锁定,无法删除/修改;
- 区分
Write和WriteLine,根据是否换行选择; - 中文乱码:手动传入
new UTF8Encoding(false)或Encoding.UTF8; - 频繁循环写入优先用 StreamWriter,不要循环创建实例;
Flush():需要实时落地文件时手动调用,一般 using 结束自动刷新。
最简通用模板
// 覆盖写入UTF8无BOM字符串
var enc = new UTF8Encoding(false);
using var sw = new StreamWriter("test.txt", false, enc);
sw.WriteLine("要写入的字符串内容");

浙公网安备 33010602011771号