Qt QDir 、QFileSystemWatcher

QDir用于访问目录结构及其内容,可以操作路径名、访问路径和文件的相关信息。Qt使用"/"作为通用的目录分隔符和URLs的目录分割符。QDir可以使用相对路径或绝对路径来指定一个文件。

isRelative()是否是相对路径。

makeAbsolute()转换成绝对路径。

path()获取路径

setPath()设置路径

dirName()绝对路径的最后一个元素

cd()跳转到指定路径

cdup()跳转父目录

mkdir()创建目录

rename()重命名

rm-dir()删除目录

exists()判断路径是否存在

isReadable,isROOT测试目录的属性。

refresh()重新读取目录的数据。

count()返回一个目录中的条目数目。

entryList()获取名称列表。

entryInfolist获取一个QFileinfo对象的列表。

filePath返回文件的相对路径

remove删除文件

setNameFilters设置过滤模式。

QFileSystemWatcher类提供了一个接口来监控文件和目录的修改。

addPath()来监视一个指定的文件或目录。

当文件被修改,重命名或者移除后,会发射fileCHanged信号。当目录或者内容被修改或移除后,会发射directoryChanged信号。文件或路径,重命名或移除后,监视器失效。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDir>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //将监视器信号和槽相连
    connect(&myWatcher,&QFileSystemWatcher::directoryChanged ,this, &MainWindow::showMessage);
    connect(&myWatcher,&QFileSystemWatcher::fileChanged,this,&MainWindow::showMessage);
    //显示当前目录下的所有.h文件
    QDir myDir(QDir::currentPath());
    myDir.setNameFilters(QStringList("*.h"));
    ui->listWidget->addItem(myDir.absolutePath() + tr("目录下的.h文件有:"));
    ui->listWidget->addItems(myDir.entryList());
    //创建目录,并将其加入到监视器中
    myDir.mkdir("mydir");
    myDir.cd("mydir");
    ui->listWidget->addItem("监视的目录:"+myDir.absolutePath());
    myWatcher.addPath(myDir.absolutePath());
    //创建文件,并将其加入到监视器中
    QFile file(myDir.absolutePath()+"/myfile.txt");
    if(file.open(QIODevice::WriteOnly))
    {
        QFileInfo info(file);
        ui->listWidget->addItem(tr("监视的文件:")+info.absoluteFilePath());
        myWatcher.addPath(info.absoluteFilePath());
        file.close();
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::showMessage(const QString &path)
{
    QDir dir(QDir::currentPath()+"/mydir");
    //如果目录发生了改变
    if(path==dir.absolutePath())
    {
        ui->listWidget->addItem(dir.dirName() + tr("目录发生改变:"));
        ui->listWidget->addItems(dir.entryList());
    }
    else            //如果文件发生变化
    {
        ui->listWidget->addItem(path+tr("文件发生改变!"));
    }
}

猜你喜欢

转载自blog.csdn.net/qq_24127015/article/details/84026766