Qt提供了通用的文件处理类QFile和处理文本的QTextStream类和处理二进制数据的QDataStream类,这些流操作极大地方便了对文件的督促存储。对文件信息和目录进行操作的类是QfileIno,QDir和QDirIterator。要监视文件和目录变化,则可以使用QFi了SystemWatcher类。

1. 文件处理类QFile

QFile类提供了一个从文件中读取和写入文件的接口。

QFile是一个用于读写文本、二进制文件和资源的I/O设备。QFile可以单独使用,或者更方便地与QTextStream或QDataStream一起使用。

文件名通常在构造函数中传递,但是可以在任何时候使用setFileName()设置它。无论操作系统如何,QFile都期望文件分隔符为'/'。不支持使用其他分隔符(例如“\”)。

可以使用exists()检查文件是否存在,并使用remove()删除文件。(QFileInfo和QDir提供了更高级的文件系统相关操作。)

用open()打开文件,用close()关闭文件,用flush()刷新文件。

通常使用QDataStream或QTextStream读取和写入数据,但是也可以调用qiodevice继承的函数read()、readLine()、readAll()和write()。QFile还继承了getChar()、putChar()和ungetChar(),它们一次处理一个字符。

文件的大小由size()返回。您可以使用pos()获取当前文件位置,或者使用seek()移动到新的文件位置。如果已经到达文件的末尾,atEnd()返回true。

1.1 读写文本文件

1.1.1 通过QIODevice来读写文件

#include <QCoreApplication>
#include <QChar>
#include <QString>
#include <QDebug>
#include <QFile>
int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QFile file("E:/work/qe/mytest1/file.txt");if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){qDebug("can not open file ");exit(0);}while (!file.atEnd()) {QByteArray line = file.readLine();qDebug("%s",line.data());}return a.exec();
}

1.1.2 通过QTextStream读写文本

#include <QCoreApplication>
#include <QChar>
#include <QString>
#include <QDebug>
#include <QFile>
int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QFile file("E:/work/qe/mytest1/file.txt");if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){qDebug("can not open file ");exit(0);}QTextStream in(&file);QString line = in.readLine();while (!line.isNull()) {qDebug("%s",line.toLatin1().data());line = in.readLine();}return a.exec();
}

1.2 操作二进制文件

QDataStream类提供了将二进制文件串行化的功能。QDataStream实现了C++的基本类型的串行化,如char,short,int,char*等。

#include <QCoreApplication>
#include <QChar>
#include <QString>
#include <QDebug>
#include <QFile>
#include <QDataStream>
#include <QTextStream>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);//! 二进制文件QFile fileBin("E:/work/qe/mytest1/file1.dat");fileBin.open(QIODevice::WriteOnly);QDataStream out(&fileBin);//! 文本文件QFile file("E:/work/qe/mytest1/file.txt");if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){qDebug("can not open file ");exit(0);}QTextStream in(&file);QString line = in.readLine();while (!line.isNull()) {qDebug("%s",line.toLatin1().data());line = in.readLine();out<<line;}file.close();fileBin.close();return a.exec();
}

1.3 临时文件

QTemporaryFile可以安全创建一个独一无二的临时文件,临时文件可以用open()来创建,Qt可以保证临时文件名不会重复。在临时文件对象销毁后,将自动删除该临时文件。临时文件通过close()关闭后还可以再打开。只要临时文件对象还没有销毁,临时文件就一直存在并由QTemporaryFile内部保持打开。

系列临时文件可以通过QDir::tempPath()来获取。在linux系统上临时目录通过是tmp,在Windows上则是由环境变量TEMP或TMP指定的。

详见《Qt学习笔记之QTemporaryFile》

2. 目录操作

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

#include <QCoreApplication>
#include <QDebug>
#include <QDir>
#include <QFileInfo>void test_dir()
{const char* PATH = "G:/ggg";QDir dir;if( !dir.exists(PATH) )   //判断电脑里是否这个目录{dir.mkdir(PATH);   //创建问价目录}if( dir.exists(PATH) ){dir.cd(PATH);QStringList list = dir.entryList();for( int i = 0; i < list.length(); i++ )    //打印目录文件{qDebug() << list[i];}}}unsigned int calculate_size(QString path)   //计算目录文件的大小
{QFileInfo info(path);unsigned int ret = 0;if( info.isFile() ){ret = info.size();}else if( info.isDir() ){QDir dir(path);QFileInfoList list = dir.entryInfoList();for( int i = 0; i < list.length(); i++ ){qDebug()<<list[i].fileName();if(list[i].fileName() !="." && list[i].fileName() != ".."){ret = ret + calculate_size(list[i].absoluteFilePath());}}}return ret;
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);test_dir();qDebug() << calculate_size("F:/论文");return a.exec();}

参考资料:

1. QT基础:40---文本文件的读写(QFile、QTextStream)

2. QT基础:42---文件目录操作(QCoreApplication、QFile、QFileInfo、QDir、QTemporaryDir/File、QFileSystemWatcher)

Qt学习笔记之文件处理相关推荐

  1. Qt学习笔记,Qt国际化

    Qt学习笔记,Qt国际化 Qt国际化步骤: 第一步:设置.pro文件,加入TRANSLATIONS为国际化做准备 TRANSLATIONS = language/language_en.ts\     ...

  2. Qt学习笔记之MySQL数据库

    一.MySQL概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQ ...

  3. Qt学习笔记之数据库

    一.数据库简介 1.1.数据和数据库(DB) 用计算机进行数据处理,首先就要把信息以数据形式存储到计算机中,故数据是可以被计算机接受和处理的符号.根据所表示的信息特征不同,数据有不同的类别,如数字.文 ...

  4. Qt学习笔记之国际化

    国际化的英文表述为Internationalization,通常简写为I18N(首尾字母加中间的字符数),一个应用程序的国际化就是使该应用程序可以让其他国家的用户使用的过程. 1. 相关的Qt类和AP ...

  5. QT学习笔记(七):定时器事件的3种常用使用方式

    QT学习笔记(七):定时器事件的2种常用使用方式 Qt中定时器的使用有2种方法:一种是使用QObject类提供的定时器通过重载 timerEvent 事件处理过程函数,一种就是使用QTimer类. 其 ...

  6. QT学习笔记(六):Qt5主窗口框架示例

    QT学习笔记(五):Qt5主窗口框架代码示例 一.添加编辑菜单:并在下拉菜单和工具栏中添加"打开文件"动作菜单 #include <QToolButton> #incl ...

  7. QT学习笔记(五):Qt5的8种标准对话框示例

    QT学习笔记(五):Qt5的8种标准对话框示例 前言 实例展示 1.颜色对话框 2.文件对话框 3.字体对话框 4.输入对话框 5.消息对框 6.进度对话框 7.错误信息对话框 8.向导对话框. 前言 ...

  8. QT学习笔记(四):Qt5+MSVC编译 中文字符显示乱码问题解决

    QT学习笔记(四):Qt5+MSVC编译 中文字符显示乱码问题解决 问题: 1.解决方法一: 2.解决方法二: 3.解决方法三: 4.解决方法四: 结果显示: Qt5+MSVC编译 中文字符显示乱码. ...

  9. QT学习笔记(三):Qt软件打包发布(QT5.8 _msvc2013_64+Win10_64)

    QT学习笔记(三):Qt软件打包发布(QT5.8 _msvc2013_64+Win10_64) 1.编译方式介绍: 2.动态编译方式打包发布QT程序: 方法一:手动复制 方法二:使用工具 问题& ...

最新文章

  1. 技术图文:Python描述符 (descriptor) 详解
  2. jpadao层继承什么_ABP框架领域层
  3. MySQL使用EXPLAIN分析SQL
  4. halcon从入门到精通pdf_机器视觉软件开发新人入门必看 --机器视觉软件开发学习路径...
  5. Netty初步之hello world
  6. 将Excle数据导入到数据库
  7. .NET架构小技巧(5)——反射,架构人员法宝III
  8. 在eclipse中使用git创建本地库,以及托管项目到GitHub超详细教程
  9. MySQL 基数的定义
  10. python基本语句大全_python常见语句汇总
  11. linux shell学习指南,shell脚本学习指南(shell脚本教程详细讲解) 电子扫描版
  12. 为什么领导不喜欢能干的员工?有这4个表现,你再有本事也被抛弃
  13. 计算机接口时序波形图怎样看,TimeQuest就一定要搞定——看懂时序波形图
  14. python爬京东联盟_Python+Selenium+Chrome抓取京东商品信息
  15. 电阻的基本原理、参数、应用与选型
  16. OPEN(SAP) UI5 学习入门系列之二: 最佳实践练习(上)
  17. 百度智能云的“星辰大海”
  18. 关于IOS的Autolayout特性的理解以及使用
  19. Bootstrap Table 中文文档(完整翻译版)
  20. 2022年N1叉车司机操作证考试题模拟考试平台操作

热门文章

  1. boost::type_erasure::incrementable相关的测试程序
  2. boost::container模块实现分配器特征的测试程序
  3. Boost:双图bimap与Boost xpressive的测试程序
  4. ITK:遍历具有成形邻域的图像区域
  5. VTK:隐式函数之ImplicitQuadric
  6. VTK:图片之ImageToPolyDataFilter
  7. OpenCV VideoCapture与捕获设备,视频文件或图像序列一起使用的实例
  8. 使用上下文属性将C ++对象嵌入QML
  9. Qt Creator在属性之间添加绑定
  10. Qt Creator创建按钮