用当前系统时间作为文件名创建文件

只要将获取的系统时间存入字符数组,就可以作为文件名创建文件了。
关于获取系统时间的各种方法,详见我的另一篇文章C/C++ 获取当前系统时间(time_t和tm)清晰梳理
下面给出几种常用方法的代码:

【注意】文件名中不能含有 / \ : * ? " < > |

方法一:
使用sprintf()把格式化的时间数据写入字符数组中
sprintf()函数头文件:#include <stdio.h>

原型 : int sprintf(char *str, char * format [, argument, …]);
参数说明:
str为要写入的字符串;
format为格式化字符串,与printf()函数相同;
argument为变量。

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

int main ()
{
    FILE *fp = NULL;
    
    time_t timep;
    struct tm *p;
    char name[256] = {0};

    time(&timep);//获取从1970至今过了多少秒,存入time_t类型的timep
    p = localtime(&timep);//用localtime将秒数转化为struct tm结构体

    sprintf(name, "%d.%d.%d %d:%02d.txt",1900+p->tm_year,1+p->tm_mon,p->tm_mday,p->tm_hour,p->tm_min);//把格式化的时间写入字符数组中

    printf("创建文件名称为:%s\n", name);
    if((fp = fopen(name, "w")) == NULL)
        perror("");

    fclose(fp);

    return 0;
}

创建文件名为 :2019.2.28 16:11.txt

在当前目录下创建一个txt文本文件,可以修改后缀名创建其他文件。

附加:struct tm结构体内部

    struct tm
    {
        int tm_sec;  /*秒,正常范围0-59, 但允许至61*/
        int tm_min;  /*分钟,0-59*/
        int tm_hour; /*小时, 0-23*/
        int tm_mday; /*日,即一个月中的第几天,1-31*/
        int tm_mon;  /*月, 从一月算起,0-11*/  1+p->tm_mon;
        int tm_year;  /*年, 从1900至今已经多少年*/  1900+ p->tm_year;
        int tm_wday; /*星期,一周中的第几天, 从星期日算起,0-6*/
        int tm_yday; /*从今年1月1日到目前的天数,范围0-365*/
        int tm_isdst; /*日光节约时间的旗标*/
    };

方法二:
利用strftime()把时间格式化并写入字符数组中
strftime()函数头文件#include <time.h>

原型 : size_t strftime(char *str, size_t count, const char *format, const struct tm *tm);
参数说明:
str, 表示返回的时间字符串
count, 要写入的字节的最大数量
format, 格式字符串由零个或多个转换符和普通字符(除%)
tm, 输入时间

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

int main ()
{
    FILE *fp = NULL;
    time_t timep;
    char name[256] = {0};

    time(&timep);//获取从1970至今过了多少秒,存入time_t类型的timep

    strftime( name, sizeof(name), "%Y.%m.%d %H-%M-%S.txt",localtime(&timep) ); //最后一个参数是用localtime将秒数转化为struct tm结构体

    printf("创建文件名称为:%s\n", name);
    if((fp = fopen(name, "w")) == NULL)
        perror("");

    fclose(fp);

    return 0;
}


创建文件名为 :2019.02.28 16-24-24.txt

附加:关于函数strftime()的格式符号

格式符号    说明
%a    区域设置的缩写星期名
%A    区域设置的完整星期名
%b    区域设置的缩写月份名
%B    区域设置的完整月份名
%c    区域设置的适当的日期和时间表示
%d    表示为一个十进制数(01-31)的当月的第几天
%H    表示为一个十进制数(00-23)的小时时间(24小时制)
%I    表示为一个十进制数(01-12)的小时时间(12小时制)
%j    表示为一个十进制数(001-366)的当年的第几天
%m    表示为一个十进制数(01-12)的月份
%M    表示为一个十进制数(00-59)的分钟数
%p    区域设置的、与12小时制相关的AM/PM指示符等价的东西
%S    表示为一个十进制数(00-61)的秒数
%U    表示为一个十进制数(00-53)的当年的第几周(第一个星期日是第一个星期的第一天)
%w    表示为一个十进制数(0-6)的星期几,星期日表示0
%W    表示为一个十进制数(00-53)的当年的第几周(第一个星期一是第一个星期的第一天)
%x    区域设置的适当的日期表示
%X    区域设置的适当的时间表示
%y    表示为一个十进制(00-99)的不带世纪的年份
%Y    表示为一个十进制的带世纪的年份
%Z    时区名字或者它的缩写取代,如果不能确定时区,则不能被字符
%%    表示%
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值