1

我正在寻找创建一个简单的'tail'类型程序,它打印出附加到文件的新行。有没有办法在以下情况下捕获信号,而不是不断轮询文件统计信息以获取更新的修改日期:

  1. 该文件已附加到
  2. 该文件已重命名
  3. 出现一个给定名称的新文件

这是我需要设计的三个要求。我发现 QFileSystemWatcher 会给我这 3 个信号(我认为)......但信号很简单......没有关于发生了什么变化的细节,所以我仍然需要调用 stat. 有什么方法可以从 QFileSystemWatcher 获取此信息?

4

1 回答 1

0

也许您正在寻找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);
}
于 2013-10-07T06:16:56.597 回答