您的位置:首页 > 编程语言 > Qt开发

Qt实现 实时监控文件夹状态

2017-12-12 12:55 525 查看
####Qt实现 实时监控文件夹状态:文件夹内容增删、重命名、删除等

//重建服务器请求监测类

#ifndef QRECONREQUESTLISTENER_H
#define QRECONREQUESTLISTENER_H

#include <QObject>
#include <QFileInfoList>

class QFileSystemWatcher;

class QReconRequestMonitor : public QObject
{
Q_OBJECT
public:
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息