欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【C/C++】用当前系统时间作为文件名创建文件

程序员文章站 2022-05-24 14:37:09
...

只要将获取的系统时间存入字符数组,就可以作为文件名创建文件了。
关于获取系统时间的各种方法,详见我的另一篇文章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 时区名字或者它的缩写取代,如果不能确定时区,则不能被字符
%% 表示%