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
相关产品推荐
相关产品推荐

