C语言复习之直接向文件中写入和读取时间Date对象
Posted 你是小KS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言复习之直接向文件中写入和读取时间Date对象相关的知识,希望对你有一定的参考价值。
开发环境:Window10,CLion
1.声明
当前内容主要为本人学习和复习之用,主要为fwrite方式写入和读取时间的操作
主要为
- 使用fwrite向文件中写入结构类型数据
- 使用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对象的主要内容,如果未能解决你的问题,请参考以下文章