一、文件操作
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! yafeilinux"); 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! yafeilinux"); //写入
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 }