QT文件和目录

一、文件操作

QFile和QFileInfo:

 1 #include <QCoreApplication>
 2 #include <QFileInfo>
 3 #include <QStringList>
 4 #include <QDateTime>
 5 #include <QDebug>
 6 
 7 int main(int argc, char *argv[])
 8 {
 9     QCoreApplication a(argc, argv);
10     //以只写方式打开,如果文件不存在,那么会创建该文件
11     QFile file("myfile.txt");
12     if(!file.open(QIODevice::WriteOnly|QIODevice::Text))
13         qDebug()<<file.errorString();
14     file.write("helloQt!\nyafeilinux");
15     file.close();
16     //获取文件信息
17     QFileInfo info(file);
18     qDebug()<<QObject::tr("绝对路径:")<<info.absoluteFilePath()<<endl
19             <<QObject::tr("文件名:")<<info.fileName()<<endl
20             <<QObject::tr("基本名称:")<<info.baseName()<<endl
21             <<QObject::tr("后缀:")<<info.suffix()<<endl
22             <<QObject::tr("创建时间")<<info.created()<<endl
23             <<QObject::tr("大小")<<info.size();
24     //以只读方式打开
25     if(!file.open(QIODevice::ReadOnly|QIODevice::Text))
26         qDebug()<<file.errorString();
27     qDebug()<<QObject::tr("文件内容:")<<endl<<file.readAll();
28     qDebug()<<QObject::tr("当前位置")<<file.pos();
29     file.seek(0);
30     QByteArray array;
31     array = file.read(5);
32     qDebug()<<QObject::tr("前5个字符:")<<array
33            <<QObject::tr("当前位置:")<<file.pos();
34     file.seek(15);
35     array = file.read(5);
36     qDebug()<<QObject::tr("第16-20个字符")<<array;
37     file.close();
38 
39     return a.exec();
40 }

总结:

QFile file("myfile.txt");    //创建一个文件,里面是路径

file.open(QIODevice::WriteOnly|QIODevice::Text)  //以只读打开,写text
file.write("helloQt!\nyafeilinux");    //写入
file.close();    //关闭
file.seek(0);    //定位
array = file.read(5);  //读取

QObject::tr("绝对路径:")<<info.absoluteFilePath()<<endl
QObject::tr("文件名:")<<info.fileName()<<endl
QObject::tr("基本名称:")<<info.baseName()<<endl
QObject::tr("后缀:")<<info.suffix()<<endl
QObject::tr("创建时间")<<info.created()<<endl
QObject::tr("大小")<<info.size();

QObject::tr("当前位置")<<file.pos();
 

二、文件系统和监视器QFilesystemWatcher

首先创建一个MainWindow的QT项目,然后在控件中添加一个List Widget部件:

mainwindow.h添加:

QFileSystemWatcher myWatcher;
void showMessage(const QString &path);
 1 #include "mainwindow.h"
 2 #include "ui_mainwindow.h"
 3 #include <QDir>
 4 
 5 MainWindow::MainWindow(QWidget *parent) :
 6     QMainWindow(parent),
 7     ui(new Ui::MainWindow)
 8 {
 9     ui->setupUi(this);
10     connect(&myWatcher,SIGNAL(directoryChanged(QString)),this,SLOT(showMessage(QString)));
11     connect(&myWatcher,SIGNAL(fileChanged(QString)),this,SLOT(showMessage(QString)));
12     //显示出当前目录下的所有.h文件
13     QDir myDir(QDir::currentPath());                      //相当于linux下的ls命令的输出
14     myDir.setNameFilters(QStringList("*.h"));                 //然后筛选的后缀为.h的文件
15     ui->listWidget->addItem(myDir.absolutePath()+tr("目录下的.h文件有:"));  //这里显示的是绝对路径
16     ui->listWidget->addItems(myDir.entryList());                //这里输出了用setNameFilters过滤后的信息
17     //创建目录,并将其加入到监视器中
18     myDir.mkdir("mydir");                              //创建了一个目录
19     myDir.cd("mydir");                                //linux内的cd指令
20     ui->listWidget->addItem(tr("监视的目录:")+myDir.absolutePath());      
21     myWatcher.addPath(myDir.absolutePath());                   //把目录加到myWatcher中
22     //创建文件,并将其加入到监视器中
23     QFile file(myDir.absolutePath()+"/myfile.txt");                          //myDir的目录是会通过cd()改变的
24     if(file.open(QIODevice::WriteOnly))                      //创建文件
25     {
26         QFileInfo info(file);
27         ui->listWidget->addItem(tr("监视的文件:")+info.absoluteFilePath());  //监视的路径
28         myWatcher.addPath(info.absoluteFilePath());               //增加监视的路径
29         file.close();
30     }
31 }
32 
33 MainWindow::~MainWindow()
34 {
35     delete ui;
36 }
37 
38 void MainWindow::showMessage(const QString &path)
39 {
40     QDir dir(QDir::currentPath()+"/mydri");
41     //如果是目录发生了改变
42     if(path == dir.absolutePath())
43     {
44         ui->listWidget->addItem(dir.dirName()+tr("目录发生改变:"));
45         ui->listWidget->addItems(dir.entryList());
46     }
47     else    //如果是文件发生了改变
48     {
49         ui->listWidget->addItem(path+tr("文件发生改变!"));
50     }
51 }

 

posted @ 2017-09-11 23:01  习惯就好233  阅读(620)  评论(0编辑  收藏  举报