要在应用程序运行时跟踪给定文件夹中文件的更改,请参阅QFileSystemWatcher
,使用它可以在调用后跟踪目录中的所有文件更改:QFileSystemWatcher::addPath
("directory/to/watch/")
当fileChanged()
文件被修改、重命名或从磁盘中删除时发出信号。同样,directoryChanged()
当目录或其内容被修改或删除时,也会发出信号。请注意,QFileSystemWatcher
一旦文件被重命名或从磁盘中删除,就会停止监视文件,一旦从磁盘中删除目录,就会停止监视。
为了在重命名文件后继续跟踪文件,只需重新启用观看它们QFileSystemWatcher::addPath()
再次使用。
当您的应用程序在重命名操作期间未运行时,您必须查看文件的内容(如果您还想涵盖文件已被删除并复制回来的情况,Linux 上的 inode / 其他文件上的任何内容系统类型已更改)。
这可以使用 MD5 和来完成,但它需要您的应用程序读取整个文件,这对于大于 10 兆字节的文件可能会很慢。如果这个缺点是可以接受的,只需保存返回的 MD5 和。当然,在某些极端情况下您会遇到哈希冲突,但对于大多数应用程序来说,这应该不是问题。但请注意,您可能无法检测到内容的更改。另请注意,上面的简单单行是阻塞的,并且在计算 MD5 和之前将整个文件读入内存。使用(使用and代替)提供的逐步 MD5 总和计算将文件“流式传输”到 MD5 计算中。QCryptographicHash::hash
(file.readAll(), QCryptographicHash::Md5)
QCryptographicHash
addData()
result()
在大多数情况下,在读取全部内容之前比较文件大小而不是创建 MD5 总和会起作用(更改导致相同文件大小的情况并不常见;在这种情况下,您可以回退到 MD5 总和比较) . 但是在你注意到一个变化之后,无论如何你都需要读取 MD5 和,以便能够检测到未来的变化!