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

C语言如何保存fprintf输出的时间记录,重启时先打印旧记录再更新

实现方案

核心逻辑

  • 固定使用本地文件time_record.log作为持久化存储载体
  • 程序启动时优先读取该文件内容并打印,即为上一次运行保存的旧时间记录,首次运行无该文件时可提示无历史记录
  • 优化原有时间格式化逻辑,修复单数字字段前导空格问题,保证输出格式规整
  • 生成最新时间后,除了原有输出到stderr的逻辑,同时将相同内容覆盖写入存储文件,完成更新

关键优化点

原有代码输出的时间存在单数字前带空格的问题,比如示例里的2021:11:5:11:20: 3,只需要把格式化符%2d替换为%02d即可自动补前导0,输出为2021:11:05:11:20:03的规范格式。另外冗长的月份switch判断可以直接用一行代码替代:sprintf(m, "%02d", month + 1);,效果完全一致。

完整可运行代码示例

#include <stdio.h>
#include <time.h>
#include <string.h>

#define LOG_FILE "time_record.log"

int main() {
    // 第一步:启动先读旧记录打印
    FILE *fp_read = fopen(LOG_FILE, "r");
    if (fp_read != NULL) {
        char buf[1024] = {0};
        printf("===== 上一次运行保存的时间记录 =====\n");
        while (fgets(buf, sizeof(buf), fp_read) != NULL) {
            printf("%s", buf);
        }
        fclose(fp_read);
        printf("==================================\n");
    } else {
        printf("===== 首次运行,无历史时间记录 =====\n");
    }

    // 原有时间获取逻辑,你自己的时间生成代码可以直接替换这部分
    time_t t = time(NULL);
    struct tm *tm_info = localtime(&t);
    int year = tm_info->tm_year;
    int month = tm_info->tm_mon;
    int wd = tm_info->tm_mday;
    int hr = tm_info->tm_hour;
    int mn = tm_info->tm_min;
    int sc = tm_info->tm_sec;
    char m[3] = {0};

    // 原有月份switch可替换为更简洁的写法,保留原switch功能也完全不受影响
    sprintf(m, "%02d", month + 1);

    year = year + 1900;

    // 原有输出到stderr的逻辑保留
    fprintf(stderr, "Time Logout (YYYY:MM:DD:HH:MM:SS):\n%d:%s:%02d:%02d:%02d:%02d\n", year, m, wd, hr, mn, sc);

    // 第二步:最新时间写入持久化文件
    FILE *fp_write = fopen(LOG_FILE, "w");
    if (fp_write != NULL) {
        fprintf(fp_write, "Time Logout (YYYY:MM:DD:HH:MM:SS):\n%d:%s:%02d:%02d:%02d:%02d\n", year, m, wd, hr, mn, sc);
        fclose(fp_write);
    }

    return 0;
}

运行说明

  1. 首次运行时会提示无历史记录,同时生成time_record.log文件保存本次时间
  2. 后续每次运行都会先打印上一次保存在文件里的时间,再输出本次最新时间同时更新文件
  3. 如果需要保存多轮历史记录而不是只保留上一次,把打开文件的模式从w改成a追加模式即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:09:02