我正在使用Visual Studio 2008 Express,我有这个日志代码:
fprintf(fp,"%s %s %s %s %d %s\n", pType, __DATE__, __TIME__, pFileName, lineNo, pMsg.c_str());
fflush(fp);
有时,如果我不删除日志并继续添加日志,__TIME__
宏只会保留打印旧时间而不是当前时间。
我正在使用以下代码打开文件
if(pfileName != NULL)
{
fp = fopen(pfileName, "a+");
if(fp != NULL)
fseek(fp, 0, SEEK_END);
}
答案 0 :(得分:8)
问题是你没有进行重建。
默认情况下,Visual Studio仅构建/编译自上次编译项目以来已更改(已修改)的源文件。这是为了节省时间,这是一个非常有用的功能。如果您想确保重新编译源文件,无论它们自上次构建后是否已被更改,您必须指示VS 重建您的代码(或通过歌曲和舞蹈做一个干净的,然后建立你的项目)。
重要的原因是__TIME__
preprocessor macro在预处理期间(在编译之前发生,<至少为了我们的目的)在当前时间扩展。它扩展了编译代码的第一次时间,除非您修改源文件或重新编译(重建)它,否则永远不会更改。
这可能不是您在日志记录功能中寻找的内容。您需要打印当前的系统时间,而不是编译时间。您可以使用time
function获取它 - 使用它,确保在源文件的顶部包含<time.h>
。或者,如果您已经包含<windows.h>
,则可以致电GetSystemTime
function填写SYSTEMTIME
structure,以便为您提供当前时间和日期。
答案 1 :(得分:2)