C# StreamWriter 写入字符串完整示例

C# StreamWriter 写入字符串完整示例

一、核心方法:Write / WriteLine

  1. Write("文本"):写入字符串,不自动换行
  2. 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(); // 强制缓冲区写入磁盘
    }
}

八、关键注意点

  1. 必须 using:不手动释放会导致文件被进程锁定,无法删除/修改;
  2. 区分 WriteWriteLine,根据是否换行选择;
  3. 中文乱码:手动传入 new UTF8Encoding(false)Encoding.UTF8
  4. 频繁循环写入优先用 StreamWriter,不要循环创建实例;
  5. Flush():需要实时落地文件时手动调用,一般 using 结束自动刷新。

最简通用模板

// 覆盖写入UTF8无BOM字符串
var enc = new UTF8Encoding(false);
using var sw = new StreamWriter("test.txt", false, enc);
sw.WriteLine("要写入的字符串内容");
posted @ 2026-06-19 20:49  人生就是修炼  阅读(13)  评论(0)    收藏  举报