Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt信号驱动尾程序_Qt_File_Append_Qfilesystemwatcher - Fatal编程技术网

Qt信号驱动尾程序

Qt信号驱动尾程序,qt,file,append,qfilesystemwatcher,Qt,File,Append,Qfilesystemwatcher,我想创建一个简单的“尾部”类型的程序,它可以打印出附加到文件上的新行。在以下情况下,是否有方法捕捉信号,而不是不断轮询文件统计以获取更新的修改日期: 该文件已附加到 该文件已重命名 将出现一个具有给定名称的新文件 这是我需要设计的三个需求。我发现QFileSystemWatcher会给我一个关于这3个的信号(我想)…但是信号很简单…没有关于发生了什么变化的详细信息,所以我仍然需要调用stat。有什么方法可以从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是否以某种方式提供了这些数据?(这就是问题)我希望文件观察家会揭露一些提供更多细节的成员/方法……我想不会。(除非有人跳进来)