You need to enable JavaScript to run this app. C# Winform 用StreamWriter给CSV日志添加仅首次生效的固定表头
优惠活动
大模型
产品
解决方案
定价
更多

C# Winform 用StreamWriter给CSV日志添加仅首次生效的固定表头

CSV表头仅首次写入解决方案

原代码问题原因

原有代码中表头写入逻辑是全局执行的,无论文件是否是新建的,每次触发写入都会同时写入表头和数据,导致表头重复出现。

核心修改逻辑

  • 将表头写入逻辑和新文件创建逻辑绑定,仅当文件不存在(首次创建)时才写入表头
  • 移除冗余的File.CreateText调用,避免不必要的文件句柄占用

修改后代码

// Write to CSV
string path = [日志文件路径];
// 提前标记是否为新创建的文件
bool isNewFile = !File.Exists(path);

string projectName = ProjectName_TextBox.Text;
// 修正原变量拼写错误 projetcBuild -> projectBuild
string projectBuild = ProjectBuild_TextBox.Text;
string projectSN = SN_TextBox.Text;
// 表头顺序已按照需求修正为 Project Name, Project SN, Project Build
string header = "Project Name, Project SN, Project Build";

using (StreamWriter sw = new StreamWriter(path, true)) 
{
    // 仅新文件首次写入时添加表头
    if (isNewFile)
    {
        sw.WriteLine(header);
    }
    // 每次仅追加数据行
    sw.WriteLine($"{projectName},{projectBuild},{projectSN}");
}

注意事项

  • 如果采集的字段内容本身包含逗号、换行符等CSV特殊字符,建议给字段值包裹双引号,避免CSV格式错乱,示例写法:
    sw.WriteLine($"\"{projectName}\",\"{projectBuild}\",\"{projectSN}\"");
    
  • 如果存在文件存在但内容为空的极端场景,可以补充判断文件长度,将isNewFile的判断逻辑调整为:
    bool isNewFile = !File.Exists(path) || new FileInfo(path).Length == 0;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 11:54:07