QT 文件及磁盘处理

QFile 用于进行文件操作,提供读写文件的接口
QTextStream 用于处理文本文件,提供读写文件的接口
QDataStream 用于处理二进制文件
QTemporaryFile 用于处理临时文件
QFileInfo 可以获取文件信息
QDir 可以处理目录
QFileSystemWatcher 可以监视文件和目录变化

  1. QFile 读写文本

    QFile file("textFile1.txt");					// 指定文件名
    if(file.open(QIODevice::ReadOnly))				// ReadOnly只读WriteOnly只写ReadWrite读写
    {
       char buffer[2048];
       qint64 lineLen = file.readLine(buffer,sizeof(buffer));       // 按行读
       if(lineLen!=-1)						// 如果失败返回-1,成功返回实际字节
       {
           qDebug()<<buffer;
       }
    }
    
  2. QTextStream 读写文本

    QFile data("data.txt");
    if(data.open(QFile::WriteOnly|QFile::Truncate))	                     // Truncate表示对原文件内容清空
    {
        QTextStream out(&data);
        out<<QObject::tr("score:")<<qSetFieldWidth(10)<<left<<90<< endl; // qSetFieldWidth设置字段宽度的格式化函数,left输出时格式左对齐
    }
    

    格式化函数介绍

    流操作符
    在这里插入图片描述

  3. QDataStream读写二进制文件

    /*将二进制数据写到数据流 */
    QFile file("binary.dat");
    file.open(QIODevice::WriteOnly | QIODevice::Truncate);
    QDataStream out(&file);                         	//将数据序列化
    out << QString(tr("周何骏:"));                   	//字符串序列化
    out << QDate::fromString("1996/09/25", "yyyy/MM/dd");
    out << (qint32)21;                                 	//整数序列化
    file.close();
    /*从文件中读取数据 */
    file.setFileName("binary.dat");
    if(!file.open(QIODevice::ReadOnly))
    {
         qDebug()<< "error!";
         return;
    }
    QDataStream in(&file);                        		//从文件中读出数据
    QString name;
    QDate birthday;
    qint32 age;
    in >> name >> birthday >> age;               	//获取字符串和整数
    qDebug() << name << birthday << age;  
    file.close();
    

    读取的时候要和写入的时候类型相同的读出
    读原始数据,可以使用readRawdata()读取,并保存到定义好的char*缓存中
    写原始数据,可以使用writeRawdata()写入
    读写原始数据需要对数据进行编码和解码。

  4. QDir目录操作与文件系统
    Qt使用"/“作为通用的目录分隔符和URL路径分隔符。底层会根据操作系统的不同转换为”/“和”"
    isRelative()isAbsolute()函数可以判断QDir对象是相对路径还是绝对路径,将相对路径转为绝对路径可以使用函数makeAbsolute()函数
    path()可以返回目录的路径,可以通过setPath()设置新路径。
    dirName()可以获得目录名
    mkdir()可以创建目录
    rename()可以改变目录名
    exists()判读目录是否存在
    isRoot()和isReadable()获得目录属性
    count()统计目录下的条目,包括文件、目录和符号连接,总的条目数。
    entryList()返回目录下所有条目组成的字符串链表。
    remove()删除文件
    redir()删除目录

QFileInfoList  QDir::entryInfoList
(
     const QStringList &nameFilters,		
           //此参数指定了文件名的过滤方式,如“*”,“.tar.gz”
     Filters filters=NoFilter,    		
           //此参数指定了文件属性的过滤方式,如目录、文件、读写属性等
     SortFlags sort=NoSort       			
           //此参数指定了列表的排序情况
)const

// 示例
QFileInfoList list=dir.entryInfoList(string,QDir::AllEntries,QDir:: DirsFirst);
**QDir::Filter()过滤方式**

在这里插入图片描述
QDir::SortFlag()排序方式
在这里插入图片描述

  1. QFileInfo获取文件信息

    QString fileName = QFileDialog::getOpenFileName(this,"打开","/", "files (*)");
    QString file = fileName ;
    QFileInfo info(file);                                   // 根据输入参数创建一个QFileInfo对象
    qint64 size = info.size();                              // 获得QFileInfo对象的大小
    QDateTime created = info.created();                     // 获得QFileInfo对象的创建时间
    QDateTime lastModified = info.lastModified();           // 获得QFileInfo对象的最后修改时间
    QDateTime lastRead = info.lastRead();                   // 获得QFileInfo对象的最后访问时间
    /* 判断QFileInfo对象的文件类型属性 */
    bool isDir = info.isDir();                              // 是否为目录
    bool isFile = info.isFile();                            // 是否为文件
    bool isSymLink = info.isSymLink();                      // 判断是否为符号连接
    bool isHidden = info.isHidden();                        // 判断QFileInfo对象的隐藏属性
    bool isReadable = info.isReadable();                    // 判断QFileInfo对象的读属性
    bool isWritable = info.isWritable();                    // 判断QFileInfo对象的写属性
    bool isExecutable = info.isExecutable();                // 判断QFileInfo对象的可执行属性
    

    在这里插入图片描述
    注意:QFileInfo是一次性将文件信息读到缓存中,后续文件信息改变后,可以通过refresh()方法刷新文件信息,也可以通过setCaching()方法关闭缓存功能。

  2. QFileSystemWatcher监视文件和目录变化

    addPath() // 添加指定的文件和目录
    addPaths()// 添加多个监视目录
    removePath()// 移除不需要监视的目录
    removePaths()// 移除不需要监视的多个目录
    fileChanged()// 当监视的文件被修改或删除时产生信号
    directoryChanged()// 当监视的目录被改变或者删除时产生的信号

    QFileSystemWatcher fsWatcher;
    fsWatcher.addPath(path);
    connect(&fsWatcher, SIGNAL(directoryChanged(QString)), this, SLOT(*****));
    
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值