- Qt 中,directoryChanged 是 QFileSystemWatcher 類的一個信號,用于監聽某個目錄的內容是否發生變化(如添加、刪除文件或子目錄)
? 一、功能說明
- QFileSystemWatcher::directoryChanged(const QString &path) 信號的作用是:
- 當你監視的目錄內容發生變化時,會發出這個信號。
- 比如: 新增文件/文件夾 刪除文件/文件 重命名文件/文件夾
? 二、使用方法
filewatcher.h
#ifndef FILEWATCHER_H
#define FILEWATCHER_H#include <QObject>
#include <QStringList>
#include <QFileSystemWatcher>class FileWatcher : public QObject
{Q_OBJECT
public:explicit FileWatcher(const QString &dirPath, QObject *parent = 0);private slots:void onDirectoryChanged(const QString &path);private:QFileSystemWatcher *watcher;QString watchDir;QStringList currentFiles;void updateFileList();
};#endif // FILEWATCHER_H
#include "filewatcher.h"
#include <QDir>
#include <QMessageBox>
#include <QDebug>FileWatcher::FileWatcher(const QString &dirPath, QObject *parent): QObject(parent), watchDir(dirPath)
{watcher = new QFileSystemWatcher(this);if (QDir(watchDir).exists()) {watcher->addPath(watchDir);updateFileList();connect(watcher, SIGNAL(directoryChanged(QString)), this, SLOT(onDirectoryChanged(QString)));} else {qDebug() << "目錄不存在: " << dirPath;}
}void FileWatcher::updateFileList()
{QDir dir(watchDir);dir.setFilter(QDir::Files | QDir::NoSymLinks);currentFiles = dir.entryList(); // 保存當前文件列表
}void FileWatcher::onDirectoryChanged(const QString &path)
{QDir dir(path);dir.setFilter(QDir::Files | QDir::NoSymLinks);QStringList newFileList = dir.entryList();// 找出被刪除的文件QStringList deletedFiles;foreach (QString file, currentFiles) {if (!newFileList.contains(file)) {deletedFiles << file;}}if (!deletedFiles.isEmpty()) {QString msg = QString::fromLocal8Bit("以下文件被刪除:\n") + deletedFiles.join("\n");QMessageBox::warning(0, QString::fromLocal8Bit("文件刪除警告"), msg);}// 更新當前文件列表currentFiles = newFileList;
}
? 三、注意事項
- 只能監控一級內容變化
它 不會遞歸 監控子目錄變化,除非你手動為每個子目錄也調用 addPath()。
如果你需要遞歸監聽,需要手動遍歷子目錄并添加到監控列表。