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("文件发生改变!"));
}
}