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

标签 c++ c

我想在“log”目录下创建一系列文件,每个文件都根据执行时间命名。在这些文件中的每一个中,我想为我的程序存储一些日志信息,比如函数原型(prototype)等。 通常我使用硬方法 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);
}

但我不知道下一步该做什么。请帮我解决这个问题!

最佳答案

声明一个足够大的 char 数组来容纳 16 + "log/"(总共 20 个字符)并将其初始化为 "log/", 然后使用 strcat() 或相关的东西将函数返回的时间字符串添加到数组的末尾。 就这样!

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

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

关于c++ - 如何创建以当前时间命名的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1425227/

相关文章:

c - 在C中将当前目录中的所有文件列出为字符串

c++ - 访问类中的私有(private)成员

c++ - 无法使用导出器类使用 assimp 导出模型

c++ - 为什么#endif 包含在.h 页面的末尾?

c++ - 如何将等效的动态分配嵌套 vector 从 C++ 编写到 Obj-C?

C++/NetBeans/CygWin/Windows - <iostream> 中 Unresolved inclusion

c - 在 C 中的输入系统调用期间添加的额外字符串

c - fgets 读取的最大尺寸

C 编程——为什么 gets() 不接受输入?

c - 为什么 printf 函数中的单个\\不显示在输出控制台屏幕中,而是显示为双\\呢?