You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按对象room属性创建多文件并写入所有对应实体数据?

问题解决:按房间批量写入文件仅保留最后一条数据的修复

问题原因

你当前的代码每次循环都会创建新的StreamWriter实例,而StreamWriter的默认构造行为是覆盖已存在的文件。所以同一个房间的PC数据,后面的写入操作会把之前的内容清空,最终每个文件只保留最后一条对应的数据。

解决方案一:先分组再写入(推荐)

先把所有PC按room分组,再为每个分组一次性写入对应文件,这样每个文件仅打开/关闭一次,效率更高:

// 先按room分组
var groupedPcs = results.GroupBy(pc => pc.room);

foreach (var group in groupedPcs)
{
    var pathFile = $"D:\\{group.Key}.txt";
    // 使用using自动释放StreamWriter资源
    using (var writerRoom = new StreamWriter(pathFile))
    {
        foreach (var pc in group)
        {
            writerRoom.WriteLine($"{pc.room.ToLower()}{pc.name.ToLower()}");
        }
    }
}

解决方案二:使用追加模式写入

如果不想提前分组,可以在创建StreamWriter时传入第二个参数true,开启追加模式,这样每次写入都会在文件末尾添加内容,而不是覆盖:

foreach (PC currentPc in results)
{
    var pathFile = $"D:\\{currentPc.room}.txt";
    // 第二个参数true表示追加模式
    using (var writerRoom = new StreamWriter(pathFile, true))
    {
        writerRoom.WriteLine($"{currentPc.room.ToLower()}{currentPc.name.ToLower()}");
    }
}

额外注意点

  • 优先用第一种分组写入的方式,减少文件IO操作次数,性能更好;
  • 始终使用using语句包裹StreamWriter,它会自动帮你关闭文件流并释放资源,避免手动Close可能带来的资源泄漏问题;
  • 路径拼接建议用Path.Combine替代字符串拼接,更安全(比如处理路径分隔符的差异):
    var pathFile = Path.Combine("D:\\", $"{group.Key}.txt");
    

内容的提问来源于stack exchange,提问作者3xcelsior

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:50:21