C语言复习之直接向文件中写入和读取时间Date对象

Posted 你是小KS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言复习之直接向文件中写入和读取时间Date对象相关的知识,希望对你有一定的参考价值。

开发环境:Window10,CLion

1.声明

当前内容主要为本人学习和复习之用,主要为fwrite方式写入和读取时间的操作

主要为

  1. 使用fwrite向文件中写入结构类型数据
  2. 使用fread读取文件中的结构类型数据(循环读取)

2.demo

Date.h

#ifndef CRESTUDY_DATE_H
#define CRESTUDY_DATE_H

typedef struct Date {
    struct tm *local;
    int year;
    int month;
    int day;
    int hour;
    int minute;
    int second;
} Date;
#endif //CRESTUDY_DATE_H

主要main.c

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include "heads/Date.h"

// 当前的格式
char *get_date_format() {
    return "%.4d/%.2d/%.2d %.2d:%.2d:%.2d";
}

// 将系统时间类型转换为自定义的Date结构
struct Date convertToDate(struct tm *local) {
    Date date;
    date.year = local->tm_year + 1900;
    date.month = local->tm_mon + 1;
    date.day = local->tm_mday;
    date.hour = local->tm_hour;
    date.minute = local->tm_min;
    date.second = local->tm_sec;
    return date;
}

// 获取当前的时间
struct Date get_current_time() {
    time_t t;
    struct tm *local;
    time(&t);
    local = localtime(&t);
    return convertToDate(local);;
}

// 使用输出日期类型数据
void printf_date(Date date){
    printf(get_date_format(),date.year,date.month,date.day,date.hour,date.minute,date.second);
    printf("\\n");
}

// 读取时间对象
void readDateObject(char *path){
    FILE *read=fopen(path, "r");
    if(read==NULL)
    {
        printf("读书的文件不存在");
        //exit(-1);
        return;
    }
    Date date;
    while(fread(&date,sizeof(struct Date),1,read)){ // 直接循环读取Date类型数据
        int ch = fscanf(read,"\\n"); // 其中必须读取分隔符
        //printf("ch == %c\\n",ch);
        printf_date(date); // 打印出当前的日期对象
    }
     // 其中1表示该Date类型的数量
    fclose(read);

}

// 向文件中追加写入Date类型数据
void writeDateObject(char *path){
    FILE *write=fopen(path, "a");
    if(write==NULL)
    {
        printf("写入的文件不存在");
        //exit(-1);
        return;
    }
    struct Date date=get_current_time();

    fwrite(&date,sizeof(struct Date),1,write);
    fprintf(write, "\\n");
    fclose(write);
}

int main()
{
    char path[]="../resources/time_bin.bin";
    writeDateObject(path);
    puts("写入当前日期信息成功");
    puts("读取当前日期信息成功");
    readDateObject(path);
    // 写入数据没有问题

    return 0;
}

3.测试

在这里插入图片描述
在这里插入图片描述
测试成功!

以上是关于C语言复习之直接向文件中写入和读取时间Date对象的主要内容,如果未能解决你的问题,请参考以下文章

Android 怎样在应用程序中向文件里写入数据?

求c语言读取写入文本文件的函数实现

c语言文件读写

使用可序列化而不是向/从文件写入和读取对象

C++之文件的读取和写入操作(文本文件和二进制文件)

c语言中如何修改储存在文件的结构体内容中。小文件