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

只要将获取的系统时间存入字符数组,就可以作为文件名创建文件了。
关于获取系统时间的各种方法,详见我的另一篇文章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时区名字或者它的缩写取代,如果不能确定时区,则不能被字符
%%表示%
在C语言中,可以使用文件指针来动态创建文件名。 首先,我们需要定义一个字符串用来存储文件名,可以使用字符数组来表示,如`char filename[50];`。 然后,我们可以使用`sprintf`函数将动态生成的文件名存储到字符串中。例如,我们可以根据当前时间来生成文件名,可以采用以下方式: ```c #include <stdio.h> #include <time.h> int main() { char filename[50]; time_t t = time(NULL); struct tm *tm = localtime(&t); sprintf(filename, "file_%d_%d_%d.txt", tm->tm_hour, tm->tm_min, tm->tm_sec); printf("生成的文件名为:%s\n", filename); return 0; } ``` 上述代码中,`time`函数获取当前时间,`localtime`函数将时间转换为本地时间,然后使用`sprintf`函数将动态生成的文件名存储到字符串`filename`中。生成的文件名格式为`file_时_分_秒.txt`。 最后,我们可以通过文件指针来创建对应的文件,如`FILE *file = fopen(filename, "w");`,通过打开文件模式为`"w"`来创建一个新文件。 需要注意的是,在实际使用中,我们需要确保文件名唯一性,避免文件名冲突。一种方法是在生成文件名时加上一个随机数或者进程ID作为后缀,以增加文件名的唯一性。 总结起来,要在C语言中动态创建文件名,我们可以使用字符数组来存储文件名,通过`sprintf`函数将动态生成的文件名存储到字符串中,然后通过文件指针来创建对应的文件。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值