2012-04-01 118 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