【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 | 时区名字或者它的缩写取代,如果不能确定时区,则不能被字符 |
%% | 表示% |
上一篇: Ribbon 超时与重试
下一篇: Java 获得文件的创建时间和修改时间