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

C#程序每次启动无法在CSV换行写入SSD数据,求排查代码问题

问题分析与修正方案

你的代码无法实现追加CSV新行的核心问题出在文件写入逻辑上,以下是具体问题点和修正后的代码:

原代码的问题

  • 文件写入模式错误:使用FileMode.OpenOrCreate配合FileAccess.Write打开文件时,文件指针会定位到开头,每次执行都会覆盖原有内容,而不是追加到末尾。
  • 未添加换行符:writer.Write没有写入换行符,导致所有记录都挤在同一行,不符合CSV的格式要求。
  • 冗余的控制台重定向:Console.SetOut相关代码完全没用,既没有通过控制台输出内容到文件,反而增加了不必要的复杂度。
  • 死循环阻塞程序:末尾的while(true) { }会让程序无限挂起,定时执行场景下会导致后续任务无法正常运行。
  • 多驱动器写入冲突:遍历所有就绪驱动器时,每个驱动器都会打开文件写入,前面的记录会被后面的覆盖,无法保留所有驱动器的空间数据。

修正后的代码

using System;
using System.IO;

namespace SSD
{
    public class Program
    {
        static void Main(string[] args)
        {
            // 指定CSV文件路径
            string csvPath = @"path.csv";
            
            // 首次运行时写入表头(可选,根据需求调整)
            if (!File.Exists(csvPath))
            {
                using (var writer = new StreamWriter(csvPath))
                {
                    writer.WriteLine("SSD剩余空间(GB),扫描时间");
                }
            }

            DriveInfo[] allDrives = DriveInfo.GetDrives();

            foreach (DriveInfo d in allDrives)
            {
                if (d.IsReady)
                {
                    // 计算剩余空间,保留两位小数优化可读性(减10的逻辑按需保留)
                    double availableFreeGB = Math.Round((d.AvailableFreeSpace / Math.Pow(10, 9)) - 10, 2);
                    // 格式化时间,避免默认格式的逗号破坏CSV结构
                    string scanTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

                    // 直接追加到文件末尾,自动处理文件打开/关闭
                    using (var writer = File.AppendText(csvPath))
                    {
                        writer.WriteLine($"{availableFreeGB},{scanTime}");
                    }
                }
            }

            Console.WriteLine("数据已成功写入CSV");
        }
    }
}

关键改动说明

  1. 使用File.AppendText:该方法自动以追加模式打开文件,新内容直接写到末尾,不会覆盖原有数据。
  2. 添加换行符:用writer.WriteLine替代Write,自动在每条记录后添加换行,保证每条数据占一行。
  3. 格式化DateTime:将时间格式化为yyyy-MM-dd HH:mm:ss,避免默认格式中的逗号导致CSV列错乱。
  4. 移除冗余代码:删掉了无用的Console.SetOut和死循环,让程序执行完成后正常退出,适配定时任务场景。
  5. 可选表头写入:首次运行时自动写入CSV表头,让数据结构更清晰(不需要可删除这段逻辑)。
  6. 优化空间计算:用Math.Round保留两位小数,让输出的空间数值更易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:05:44