回答
查看man page的stat(2)
。獲取struct stat
結構的st_mtime
成員,它將告訴您文件的修改時間。如果當前mtime比之前的mtime晚,則文件已被修改。
一個例子:
int file_is_modified(const char *path, time_t oldMTime) {
struct stat file_stat;
int err = stat(path, &file_stat);
if (err != 0) {
perror(" [file_is_modified] stat");
exit(errno);
}
return file_stat.st_mtime > oldMTime;
}
這裏的an introduction to inotify
,如果這就是你要找的內容。
如果stat失敗並且不返回0,那麼這是否意味着文件被修改.. ?? – 2012-02-21 11:56:49
感謝您的編輯......你是什麼意思? – Anthony 2012-02-21 12:17:41
@ Mr.32:我想你對這個信息感到困惑。這意味着錯誤發生在'file_is_modified'函數中(如果你看到這個函數的名字)。也許'perror(「[file_is_modified] stat」);'不會讓你有這個疑問 – 2012-02-21 12:29:13
規範的方法是通過stat(2)
檢查文件的mtime。
你可以發佈代碼嗎? – 2012-02-21 12:32:25
手冊頁中的示例有什麼問題? – 2012-02-21 12:42:34
您必須使用inotify。
stat()比這個用途更糟糕。如果st_mtime與上次檢查時不同,那麼這會告訴您文件已更改,並且一切正常。
但是如果st_mtime是一樣的呢?不能保證這意味着文件在文件系統時間戳的粒度範圍內沒有改變。例如,在ext3中,粒度趨向於幾毫秒。你不能依賴你檢查兩者之間的時間差,重要的是你的程序最後一次檢查後文件可能有多快被改變。
所以,即使st_mtime是一樣的,你也不能確定文件還沒有的變化。因此你必須假設它已經存在了,而且通過測試來欺騙你自己也沒有意義。
如果您希望在創建和替換操作中將文件(該名稱)替換爲新文件,則st_ino也會出現相同的問題。 inode號碼可以被重新使用,並且在幾次替換之後,文件(通過名稱)可以再次返回到其原始inode號碼。
同樣的問題適用於文件大小,甚至創建文件的散列。所有允許您確定的是該文件已更改。這些方法都不能讓你完全確信它已經改變了,甚至散列(儘管這接近了置信度)還沒有。
不要浪費你的時間stat(),這是一個傻瓜的差事。
- 1. 檢查文件是否更改名稱
- 2. Linux更改文件修改日期?
- 3. 檢查IList是否更改?
- 4. Linux - 修改文件修改/訪問/更改時間
- 5. 檢查文件是否已被修改
- 6. 檢查文件未被修改或更改的最佳方法
- 7. 檢測文件是否正在更改
- 8. 如何檢查文件是否已被修改在c#
- 9. 檢查文件是否已經及時修改在C#
- 10. 檢查文件是否更新
- 11. iOS是否更新文件修改日期?
- 12. 如何檢查文件夾的內容是否已更改
- 13. 檢查更新後ArrayList大小是否更改
- 14. 崇高的文本2:檢查文件是否是最新的或已更改
- 15. 檢測文件更改 - 修補系統
- 16. 監控文件更改C++ linux
- 17. 檢查文本框是否已更改。如果是這樣,更新字段。
- 18. ,如何檢查ImageField是否已更改?
- 19. 檢查輸入是否未更改
- 20. Javascript:檢查url是否被更改?
- 21. 檢查目錄是否已更改
- 22. JPanel檢查值是否更改
- 23. 檢查屬性是否已更改
- 24. 如何檢查EditText是否被更改?
- 25. 檢查代碼是否被更改
- 26. 更改mysql更新文件
- 27. 打開文件後檢查文件是否被修改關閉
- 28. 在linux中修改文件之前檢查文件的內容
- 29. 檢查文件的修改
- 30. 將修改文件更新到Rackspace雲
僅當文件不同才應該處理(更新不一定意味着不同)? – hmjd 2012-02-21 11:52:24
你也可以看看['inotify'](http://linux.die.net/man/7/inotify) – 2012-02-21 12:04:48
可以說它是一個srt/subtitle/captions文件。編號喜歡檢查它是否已更新之前,我從中提取數據。 – 2012-02-21 12:31:15