如何创建以当前时间命名的文件?

时间:2009-09-15 05:13:35

标签: c++ c

我想在“log”目录下创建一系列文件,每个文件根据执行时间命名。在每个文件中,我想为我的程序存储一些日志信息,如行为的函数原型等。 通常我使用fopen的硬方式(“log / ***”,“a”),这不是为了这个目的。我只是写一个时间戳函数:

char* timeStamp(char* txt){
  char* rc;
  char timestamp[16];
  time_t rawtime = time(0);
  tm *now = localtime(&rawtime);

  if(rawtime != -1) {
     strftime(timestamp,16,"%y%m%d_%H%M%S",now);
     rc = strcat(txt,timestamp);
  }
  return(rc);
}

但我不知道接下来该做什么。请帮帮我!

4 个答案:

答案 0 :(得分:3)

声明一个char数组大到足以容纳16 + "log/"(总共20个字符)并将其初始化为"log/"然后使用strcat()或其他内容相关的是将函数返回的时间字符串添加到数组的末尾。然后你就去了!

注意字符串添加是如何工作的:您的char数组是16个字符,这意味着您可以输入15个字符加上一个空字节。重要的是不要忘记这一点。如果您需要16个字符的字符串,则需要将其声明为char timestamp[17]。请注意,"log/"是一个4个字符的字符串,因此它占用5个字符(一个用于结尾的nul字节),但strcat()将覆盖开始的nul字节最后,所以你最终会得到正确的数字。不要将nul终结器计算两次,但更重要的是,不要忘记它。调试是一个更大的问题。

编辑:当我们参与其中时,我误读了你的代码。我认为它只返回了一个带有时间的字符串,但似乎它为传入的字符串添加了时间。这可能比我想象的要好。但是,如果您愿意,您可以让函数完成所有工作 - 它会在放置时间戳之前将"log/"放入字符串中。这并不难。

答案 1 :(得分:3)

这个怎么样:

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

#define LOGNAME_FORMAT "log/%Y%m%d_%H%M%S"
#define LOGNAME_SIZE 20

FILE *logfile(void)
{
    static char name[LOGNAME_SIZE];
    time_t now = time(0);
    strftime(name, sizeof(name), LOGNAME_FORMAT, localtime(&now));
    return fopen(name, "ab");
}

你会这样使用它:

FILE *file = logfile();
// do logging
fclose(file);

请记住,localtime()不是线程安全的!

答案 2 :(得分:1)

听起来你已经基本解决了它 - 创建一个你描述的文件:

char filename[256] = "log/";
timeStamp( filename );
f = fopen( filename, "a" );

或者你希望做更多的事情吗?

答案 3 :(得分:1)

在C ++中创建(或写入)顺序访问文件的步骤:

1.Declare流变量名:

ofstream fout;  //each file has its own stream buffer

ofstream是输出文件流的缩写 fout是流变量名 (可能是任何合法的C ++变量名。) 命名流变量“fout”有助于记忆 信息将“输出”到文件中。

2.打开文件:

fout.open(filename,ios :: out);

fout是先前声明的流变量名 “scores.dat”是文件的名称 ios :: out是蒸汽操作模式 (您的编译器可能不需要您指定 流操作模式。)

3.将数据写入文件:

fout<<grade<<endl;
fout<<"Mr";

数据必须用空格字符或行尾字符(回车符)分隔,否则数据将在文件中一起运行并且不可读。尝试将数据保存到文件中,方法与在屏幕上显示的方式相同。

如果使用iomanip.h头文件,您将能够使用熟悉的格式化命令和文件输出。

fout<<setprecision(2);
fout<<setw(10)<<3.14159;

4.关闭文件:

fout.close( );

关闭文件会将缓冲区中剩余的所有数据写入文件,从程序中释放文件,并更新文件目录以反映文件的新大小。程序完成访问文件后,应立即关闭该文件。程序终止时,大多数系统会关闭所有数据文件。如果程序终止时数据仍保留在缓冲区中,则可能会丢失该数据。不要冒险 - 关闭文件!