天天看点

QT 文件监视系统QFileSystemWatcher监视目录的改变directoryChanged和监视文件的改变fileChanged相关操作说明mainwindow.hmainwindow.cpp调试结果

QT 文件监视系统QFileSystemWatcher监视目录的改变

  • 相关操作说明
  • mainwindow.h
  • mainwindow.cpp
  • 调试结果

相关操作说明

添加头文件

Header:

#include

qmake:

QT += core

如果路径存在,则会向文件系统监视器添加路径。如果该路径不存在,或者该路径已被文件系统监视器监视,则不会添加该路径。

如果路径指定了一个目录,则当修改或从磁盘中删除路径时,将发出目录更改的directoryChanged()信号;

否则,当修改、重命名或删除路径时,将发出文件化的fileChanged()信号。

返回应用程序的当前目录的绝对路径。

创建一个名为目录名的子目录。

成功时返回true;否则将返回false。如果在调用此函数时该目录已经存在,则它将返回false。

returns the path. this may contain symbolic links, but never contains redundant “.”, “…” or multiple separators.

返回该路径。这可能包含符号链接,但从不包含冗余

"."

;,

".."

或多个分隔符。

当修改指定路径上的目录(例如,添加或删除文件)或从磁盘中删除时,就会发出此信号。请注意,如果在短时间内发生了多个更改,则某些更改可能不会发出此信号。然而,变化序列中的最后一个变化总是会产生这个信号。

注意

:这是一个私人信号。它可以用于信号连接,但不能由用户发出。

当将指定路径上的文件从磁盘中进行修改、重命名或删除时,就会发出此信号。

注意:作为一种安全措施,许多应用程序通过编写一个新文件,然后删除一个旧文件来保存一个打开的文件。在插槽函数中,您可以检查watcher.files().contains(路径)。如果它返回false,请检查该文件是否仍然存在,然后调用添加路径()以继续监视它。

注意

:这是一个私人信号。它可以用于信号连接,但不能由用户发出。

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QFileDialog>
#include <QFile>
#include <QFileSystemWatcher>
#include <QMessageBox>
#include <QVBoxLayout>
#include <QLabel>
#include <QDebug>
#include <QApplication>
#include <QDateTime>
#include <QDir>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
public slots:
    void  DirChanged( QString path);
    void FileChanged(QString filename);

private:
    QFileSystemWatcher filewatcher;//文件系统监视对象
    QLabel *label;
};
#endif // MAINWINDOW_H


           

mainwindow.cpp

#include "mainwindow.h"


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    QStringList list = qApp->arguments();//获取行参数
    qDebug()<<"\nlist = "<<list.size();
    for (int i=0;i<list.size();i++) {
            qDebug()<<"i="<<i<<"list = "<<list.at(i);
    }

    QString strpath;
    if(list.count() > 1)
        strpath = list.at(1);
    else
        strpath = QDir::currentPath();//当前工程路径
    qDebug()<<"\nstrpath = "<<strpath;
    label = new QLabel(this);
    label->setFixedSize(100,100);
    label->setWordWrap(true);
    label->setText(tr("监视目录为:\n")+strpath);

    this->setFixedSize(QSize(500,500));

    filewatcher.addPath(strpath);                           //添加系统监控路径
    QDir dir;
    dir.cd(QDir::currentPath());                                //进入当前目录
    dir.mkdir("ddd");                                               //创建文件夹
    //dir.cdUp();                                                        //进入上一级目录
    qDebug()<<"path = "<<dir.path();
    QFile file;
    file.setFileName(QDir::currentPath()+"/ddd/"+"w.txt");//在ddd/创建文本文件
    bool isopen = file.open(QIODevice::WriteOnly | QIODevice::Text);
    if(!isopen)
    {
        qDebug()<<"文件打开失败";
        return;
    }
    filewatcher.addPath(file.fileName());
    connect(&filewatcher,SIGNAL(directoryChanged( QString)),this,SLOT(DirChanged( QString)));
    connect(&filewatcher,SIGNAL(fileChanged( QString)),this,SLOT(FileChanged( QString)));
}

MainWindow::~MainWindow()
{
}

//创建目录 或者 创建目录等会监控到弹出警告框
void MainWindow::DirChanged(QString path)
{
    qDebug()<<"path = "<<path;//当前目录路径
    QMessageBox::warning(NULL,"系统监控目录变化",path);
}

//当修改、重命名或删除文件时
void MainWindow::FileChanged(QString filename)
{
    qDebug()<<"filename = "<<filename;//当前目录路径
    QMessageBox::critical(NULL,"系统监控目录文本文件变化",filename);
}



           

调试结果

QT 文件监视系统QFileSystemWatcher监视目录的改变directoryChanged和监视文件的改变fileChanged相关操作说明mainwindow.hmainwindow.cpp调试结果

修改目录 删除 重命名等

QT 文件监视系统QFileSystemWatcher监视目录的改变directoryChanged和监视文件的改变fileChanged相关操作说明mainwindow.hmainwindow.cpp调试结果

修改文件 删除 重命名等

QT 文件监视系统QFileSystemWatcher监视目录的改变directoryChanged和监视文件的改变fileChanged相关操作说明mainwindow.hmainwindow.cpp调试结果