回答
查看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