Qt信号驱动尾程序
我想创建一个简单的“尾部”类型的程序,它可以打印出附加到文件上的新行。在以下情况下,是否有方法捕捉信号,而不是不断轮询文件统计以获取更新的修改日期:Qt信号驱动尾程序,qt,file,append,qfilesystemwatcher,Qt,File,Append,Qfilesystemwatcher,我想创建一个简单的“尾部”类型的程序,它可以打印出附加到文件上的新行。在以下情况下,是否有方法捕捉信号,而不是不断轮询文件统计以获取更新的修改日期: 该文件已附加到 该文件已重命名 将出现一个具有给定名称的新文件 这是我需要设计的三个需求。我发现QFileSystemWatcher会给我一个关于这3个的信号(我想)…但是信号很简单…没有关于发生了什么变化的详细信息,所以我仍然需要调用stat。有什么方法可以从QFileSystemWatcher获取此信息吗?也许你正在寻找和它的文件变化信号 您可
文件变化
信号
您可以在应用程序中保存一个QHash
,它将文件路径映射到它的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);
}
//myapplicationobjec.h
类MyApplicationObject
{
// ...
私人:
QHash m_fileInfos;
};
//myapplicationobjec.cpp
//连接到QFileSystemWatcher::fileChanged信号的插槽
void MyApplicationObject::fileHasChanged(常量QString&path)
{
QFileInfo新文件信息(路径);
QFileInfo oldFileInfo(m_fileInfos.value(path));
//例如,比较大小
如果(newFileInfo.size()!=oldFileInfo.size()){
//如果文件大小已更改,请执行某些操作
}
//用新文件信息替换旧文件信息
m_fileInfos.insert(路径,newFileInfo);
}
但我如何知道更改是否是由于以下原因造成的:数据附加到文件,文件被重命名,没有文件,现在创建了一个?QFileSystemWatcher是否以某种方式提供了这些数据?(这就是问题)我希望文件观察家会揭露一些提供更多细节的成员/方法……我想不会。(除非有人跳进来)