Qt实现 实时监控文件夹状态
####Qt实现 实时监控文件夹状态:文件夹内容增删、重命名、删除等
//重建服务器请求监测类#ifndef QRECONREQUESTLISTENER_H#define QRECONREQUESTLISTENER_H#include <QObject>#include <QFileInfoList>class QFileSystemWatcher;class QReconRequestMonitor : public QObject{ Q_OBJECTpublic: QReconRequestMonitor( const QString& strDirectory ); ~QReconRequestMonitor();signals: void sigCommitReconRequest( const QString& strFilePath );protected slots: void slotDirectoryChanged( const QString& strDirectory );private: QStringList GetFileNames( const QFileInfoList& fileInfoList );private: QString m_strMonitorDirectory; QStringList m_strListFileNames; QFileSystemWatcher* m_pDirectoryWatcher;};#endif // QRECONREQUESTLISTENER_H
#include "QReconRequestMonitor.h"#include <QDir>#include <QStringList>#include <QFileSystemWatcher>QReconRequestMonitor::QReconRequestMonitor( const QString& strDirectory ){ m_strListFileNames.clear(); m_strListFileNames = QDir( strDirectory ).entryList(); m_strMonitorDirectory = strDirectory; m_pDirectoryWatcher = new QFileSystemWatcher( this ); m_pDirectoryWatcher->addPath( strDirectory ); connect( m_pDirectoryWatcher, SIGNAL( directoryChanged( const QString& ) ), this, SLOT( slotDirectoryChanged( const QString& ) ) );}QReconRequestMonitor::~QReconRequestMonitor(){ m_strListFileNames.clear();}void QReconRequestMonitor::slotDirectoryChanged( const QString& ){ QStringList strListFileNames; //To save new file names QFileInfoList fileInfoList = QDir( m_strMonitorDirectory ).entryInfoList(); for( int n = 0; n < fileInfoList.size(); n++ ) { QFileInfo fileInfo = fileInfoList[ n ]; if( fileInfo.fileName().compare( "." ) == 0 || fileInfo.fileName().compare( ".." ) == 0 ) continue; if( fileInfo.isDir() ) continue; QString strFileName = fileInfo.fileName(); if( !m_strListFileNames.contains( strFileName ) ) strListFileNames << strFileName; } if( strListFileNames.isEmpty() ) { m_strListFileNames.clear(); m_strListFileNames = GetFileNames( fileInfoList ); return; } for( int n = 0; n < strListFileNames.size(); n++ ) { //commit recon request QString strFilePath = m_strMonitorDirectory + "/" + strListFileNames[ n ]; emit sigCommitReconRequest( strFilePath ); } m_strListFileNames.clear(); m_strListFileNames = GetFileNames( fileInfoList ); return;}QStringList QReconRequestMonitor::GetFileNames( const QFileInfoList& fileInfoList ){ QStringList strLstNames; int nFileNum = fileInfoList.size(); for( int n = 0; n < nFileNum; n++ ) { QFileInfo fileInfo = fileInfoList[ n ]; strLstNames << fileInfo.fileName(); } return strLstNames;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。