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

C# WPF应用中CSV文件写入功能的实现问题

C# WPF应用中CSV文件写入功能的实现问题

嗨,看起来你已经把基础框架搭得七七八八了,就差核心的LogIntoFile方法实现对吧?别着急,我来一步步帮你搞定这个问题!

首先,咱们得先在MainWindow类里加一个计数器变量,用来记录每次触发日志时的计数:

private int counter = 0; // 新增计数器变量,记录日志次数

接下来就是关键的LogIntoFile方法了,这个方法要处理表头写入、数据拼接和文件写入三个核心逻辑,代码如下:

private void LogIntoFile(object sender, EventArgs e)
{
    // 先获取文件路径,避免空路径报错
    string logFilePath = txtLogPath.Text;
    if (string.IsNullOrEmpty(logFilePath))
    {
        MessageBox.Show("日志文件路径不能为空!");
        autoLogTimer.Stop(); // 路径不对就停止定时器
        return;
    }

    // 递增计数器
    counter++;

    // 获取当前格式化的时间
    string currentTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"); // 精确到毫秒,可按需调整

    try
    {
        // 使用using语句确保StreamWriter自动释放资源,避免文件被占用
        using (StreamWriter writer = new StreamWriter(logFilePath, true, Encoding.UTF8))
        {
            // 第一次写入时先写表头
            if (!headersWritten)
            {
                writer.WriteLine("时间,计数器值");
                headersWritten = true;
            }

            // 写入当前日志行,注意CSV用逗号分隔(如果内容含逗号要加引号,这里咱们先简化处理)
            writer.WriteLine($"{currentTime},{counter}");
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show($"写入日志失败:{ex.Message}");
        autoLogTimer.Stop(); // 出错就停止定时器,避免反复报错
    }
}

另外,你之前的停止按钮代码没写完,补全一下:

private void btnStopLog_Click(object sender, RoutedEventArgs e)
{
    autoLogTimer.Stop();
    counter = 0; // 可选:停止后重置计数器,下次启动从1开始
}

几个需要注意的点:

  • 文件写入模式:StreamWriter的第二个参数传true表示追加写入,这样每次日志都会加到文件末尾,不会覆盖之前的内容。
  • 资源释放:用using包裹StreamWriter,不管有没有异常都会自动关闭文件,避免出现文件被占用的问题。
  • 异常处理:加上try-catch块能防止写入失败导致程序崩溃,还能及时给用户提示。
  • 时间格式:我用了yyyy-MM-dd HH:mm:ss.fff的格式,你可以根据需求调整,比如去掉毫秒或者改成其他格式。

这样一来,当你点击启动按钮后,定时器每3秒就会把当前时间和计数器值写入指定的CSV文件,表头只会在第一次启动时写一次,停止后计数器还能重置(可选),完美解决你的需求!

备注:内容来源于stack exchange,提问作者Uuno Purhaturo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 10:08:03