第九章 Qt5 文件及磁盘处理

一、前言

        Qt提供了QFile类用于进行文件操作。QFile类提供了读写文件的接口,可以读写文本文件二进制文件Qt的资源文件

        1、处理文本文件和二进制文件,可以使用QTextStream类和QDataStream类;

        2 、处理临时文件可以使用QTemporaryFile;

        3、获取文件信息可以使用QFileInfo;

        4、处理目录可以使用QDir;

        5、监视文件和目录变化可以使用QFileSystemWatcher。

二、读写文本文件

        读写文本文件的方法通常有两种:一种是直接利用传统的QFile类方法;另一种是利用更方便的QTextStream

2.1使用QFile类读写文本

#include 
#include 
#include 

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QFile file("textFile1.txt");                        //(a)
    if(file.open(QIODevice::ReadOnly)){                 //(b)
        char buffer[2048];
        qint64 lineLen = file.readLine(buffer,sizeof(buffer));//(c)
        
        if(lineLen != -1){                              //(d)
            qDebug()<

(a)QFile file("textFile1.txt"):

        打开文件有两种方式。一种方式是在构造函数中指定文件名;另一种方式是使用setFileName()函数设置文件名。

(b)if(file.open(QIODevice::ReadOnly):

        打开文件使用open()函数,关闭文件使用close()函数。

        只读方式--QIODevice:ReadOnly;

        只写方式--QIODevice:WriterOnly;

        可读可写--QIODevice:ReadWrite。

(c)qint64 lineLen = file.readLine(buffer,sizeof(buffer)):

        在QFile中可以使用从QIODevice中继承的readLine()函数读取文件的一行。

(d)if(lineLen != -1){qDebug()<

        如果读取成功,则readLine()函数返回实际读取的字节数;如果读取失败,则返回“-1”。

2.2使用QTextStream类读写文件

#include 
#include 
#include 

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QFile data("data.txt");
    if(data.open(QFile::WriteOnly | QFile::Truncate)){ //(a)
        QTextStream out(&data);
        out<

注意:程序运行后会在debug文件里生成一个data.txt文件,文件里的内容是“score:100”

(a)if(data.open(QFile::WriteOnly | QFile::Truncate)):

        QFile::Truncate表示将原本文件中的内容清空。输出时将格式设为左对齐,占10个字符位置。

(b)out<

        用户使用格式化函数和流操作符设置需要的输出格式。

QTextStream的格式化函数

函数 功能描述
qSetFieldWidth(int width) 设置字段宽度
qSetPedChar(QChar ch) 设置填充字符
qSetRealNumberPercision(int precision) 设置实数精度

QTextStream的流操作符

操作符 作用描述
left 左对齐
right 右对齐
center 居中
endl 换行
flush 清楚缓冲
bin 设置读写的整数为二进制数
oct 设置读写的整数为八进制数
dec 设置读写的整数位十进制数

hex

设置读写的整数为十六进制数

三、读写二进制文件

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    fileFun();
}

MainWindow::~MainWindow()
{

}

void MainWindow::fileFun()
{
    /* 将二进制数据写到数据流 */
    QFile file("binary.dat");
    file.open(QIODevice::WriteOnly | QIODevice::Truncate);
    QDataStream out(&file);                             //数据序列化
    out<>name>>birthday>>age;
    qDebug()<

四、目录操作与文件系统

        QDir类具有存取目录结构和内容的能力,使用它可以操作目录、存取目录或文件信息、操作底层文件系统。而且还可以存取Qt的资源文件。

        Qt使用“/”作为通用的目录分隔符和URL路径分隔符。

        QDir可以使用相对路径或者绝对路径指向一个文件。isRelative()、isAbsolute()函数判断QDir对象使用的是绝对路径还是相对路径。makeAbsolute()可以将相对路径转换为绝对路径。

        path():返回目录路径;

        setPath():设置新路径;

        absolutePath():返回绝对路径;

        dirName():获得目录名;

        cd():改变目录的路径;

        cdUp():改变目录的路径;

        mkdir():创建目录;

        rename():改变目录名;

        exists():判断目录是否从在;

        isReadable()、isAbsolute()、isRelative()、isRoot():获取目录属性;

        count():统计目录下的总条目;

        entryList():返回目录下所有条目组成的字符串链表;

        remove():删除文件;

        rmdir():删除目录;

4.1文件大小与路径获取实例

#include 
#include 
#include 
#include 
qint64 du(const QString &path)
{
      QDir dir (path);
      qint64 size= 0;
      foreach(QFileInfo fileInfo,dir.entryInfoList(QDir::Files))
      {
          size += fileInfo.size (); //获取第一个dir文件夹内的占用空间

      }
      foreach(QString subDir,dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot))
      {
          size+= du(path+QDir::separator()+subDir);  /*循环获得dir后获取的文件*/
      }
      char unit ='B';               /*记录数据的大小从B,K,M1024)
      {
          curSize/=1024;
          unit ='K';
          if (curSize>1024)
          {
              curSize/=1024;
              unit ='M';
              if(curSize>1024)
              {
                  curSize/=1024;
                  unit ='G';
              }
          }
      }
      qDebug () <1)
    {
        path= args[1];
    }
    else
    {
       path = QDir::currentPath () ;
    }
    qDebug()<

        第九章 Qt5 文件及磁盘处理_第1张图片

。。。。明天再写

你可能感兴趣的:(Qt5开发及实例,qt,开发语言)