【问题标题】:Qt signal driven tail programQt 信号驱动尾部程序
【发布时间】:2013-10-07 03:34:09
【问题描述】:

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

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

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

【问题讨论】:

    标签: qt file append qfilesystemwatcher


    【解决方案1】:

    也许您正在寻找QFileSystemWatcher 及其fileChanged 信号。

    您可以在应用程序中保存QHash<QString, QFileInfo>,它将文件路径映射到其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);
    }
    

    【讨论】:

    • 但是我怎么知道更改是否是由于:数据附加到文件,文件被重命名,没有文件,现在创建了一个文件? QFileSystemWatcher 是否以某种方式提供该数据? (这就是问题)
    • 我希望文件观察器会公开一些提供更多细节的成员/方法......我想不会。 (除非其他人加入)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 2014-12-17
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    相关资源
    最近更新 更多