zoukankan      html  css  js  c++  java
  • 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!
    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 }
    无欲速,无见小利。欲速,则不达;见小利,则大事不成。
  • 相关阅读:
    linux从入门到精通(五)(更改文件的所有者,所属组)
    【洛谷】4180:【模板】严格次小生成树[BJWC2010]【链剖】【线段树维护最大、严格次大值】
    CF980E The Number Games【树链剖分/线段树】
    【POJ】1419:Graph Coloring【普通图最大点独立集】【最大团】
    【HDU】2866:Special Prime【数论】
    【BZOJ】1415: [Noi2005]聪聪和可可【期望】【最短路】【记忆化搜索】
    【BZOJ】2561: 最小生成树【网络流】【最小割】
    【洛谷】3966:[TJOI2013]单词【AC自动机】【fail树】
    【10.17校内测试】【二进制数位DP】【博弈论/预处理】【玄学(?)DP】
    【洛谷】2602: [ZJOI2010]数字计数【数位DP】
  • 原文地址:https://www.cnblogs.com/ch122633/p/7507806.html
Copyright © 2011-2022 走看看