我正在寻找创建一个简单的'tail'类型程序,它打印出附加到文件的新行。有没有办法在以下情况下捕获信号,而不是不断轮询文件统计信息以获取更新的修改日期:
- 该文件已附加到
- 该文件已重命名
- 出现一个给定名称的新文件
这是我需要设计的三个要求。我发现 QFileSystemWatcher 会给我这 3 个信号(我认为)......但信号很简单......没有关于发生了什么变化的细节,所以我仍然需要调用 stat. 有什么方法可以从 QFileSystemWatcher 获取此信息?
我正在寻找创建一个简单的'tail'类型程序,它打印出附加到文件的新行。有没有办法在以下情况下捕获信号,而不是不断轮询文件统计信息以获取更新的修改日期:
这是我需要设计的三个要求。我发现 QFileSystemWatcher 会给我这 3 个信号(我认为)......但信号很简单......没有关于发生了什么变化的细节,所以我仍然需要调用 stat. 有什么方法可以从 QFileSystemWatcher 获取此信息?
也许您正在寻找QFileSystemWatcher及其fileChanged
信号。
您可以QHash<QString, QFileInfo>
在您的应用程序中保存 a ,它将文件路径映射到其QFileInfo
. 在连接到QFileSystemWatcher::fileChanged(const QString & path)
信号的插槽中,您可以从更改的文件中创建 QFileInfo 并将其与哈希中的文件进行比较。之后将其设置为新QFileInfo
的哈希。
// myapplicationobjec.h
class MyApplicationObject
{
// ...
private:
QHash<QString, QFileInfo> m_fileInfos;
};
// myapplicationobjec.cpp
// Slot that is connected to QFileSystemWatcher::fileChanged signal
void MyApplicationObject::fileHasChanged(const QString & path)
{
QFileInfo newFileInfo(path);
QFileInfo oldFileInfo(m_fileInfos.value(path));
// Compare size for example
if (newFileInfo.size() != oldFileInfo.size()) {
// do something if file size has changed
}
// Replace old file info with new file info
m_fileInfos.insert(path, newFileInfo);
}