2012-04-01 119 views
0

我有一个项目中,我创建一个文件,并使用获得文件的创建时间: -缓存时间戳

stat("C:/repos/trunk/logging/test.log",&attrib); 

我要缓存的最后一个时间戳,这样我就不会采取这种在每个日志消息上。

请提供帮助。

感谢

+1

“缓存上次时间戳”是什么意思?无论你想缓存什么,为什么你不把它存储在一个变量? – 2012-04-01 18:26:16

+0

我只是想缓存它,所以我不需要打每个日志消息,也存储在一个变量会像字符串date1 //变量声明为全局或类似这样,我已经做了︰ - stat( “C:/repos/trunk/logging/test.log”,&ATTRIB); clock = gmtime(&(attrib.st_ctime)); – gandhigcpp 2012-04-01 18:32:11

+0

那么,你*可以*使用全球,但你应该尝试找到一种方法来避免它。但无论你做什么,它都会涉及将信息存储在某处*。 – 2012-04-01 18:33:28

回答

0

stat不给你文件创建时间。它为您提供文件修改时间,访问时间和inode更改时间。

如果需要,您肯定可以缓存该信息,但需要遵守正常的缓存问题,即如果文件被修改并且您不再检查的时间过长,则存在缓存中陈旧数据的风险。

如果您的程序是单线程的,而您只处理一个文件,则可以使用例如static变量。否则,您可能需要创建一个保存缓存时间戳的对象(以OO的方式),并将缓存值的TTL保存为内部状态,并提供查询和/或刷新值的方法。

+0

:我正在查看stat的功能,它显示通过使用: - stat(“C:/repos/trunk/logging/test.log”,&attrib ); clock = gmtime(&(attrib.st_ctime)); // st_ctime给出创建时间,我不会说它是单线程的,但是我目前正在处理单个文件 – gandhigcpp 2012-04-01 19:33:16

+0

不,['st_ctime'是inode更改时间] (http://pubs.opengroup.org/onlinepubs/007904975/basedefs/sys/stat.h.html)。这意味着文件的属性(例如权限,时间戳,扩展属性等)最后更改的时间,而不是上次更改文件的_contents_时的“st_mtime”。 – Celada 2012-04-01 19:56:11

+0

:所以如果我只是需要有时间,当文件刚刚创建,那么我应该用什么?并给出一些建议,以获得时间在某处... – gandhigcpp 2012-04-01 20:02:40