CSDN话题挑战赛第2期
参赛话题:学习笔记
欢迎小伙伴的点评✨✨,相互学习c/c++应用开发。🍳🍳🍳
博主🧑🧑 本着开源的精神交流Qt开发的经验、将持续更新续章,为社区贡献博主自身的开源精神👩🚀
前言
本章节会给大家带来Qt5文件及磁盘处理概述及读写文本文件的开发实例详解。
一、Qt5文件及磁盘处理概述
Qt 提供了 QFile 类用于进行文件操作。 QFile 类提供了读写文件的接口,可以读写文本文件、二进制文件和 Qt 的资源文件。
处理文本文件和二进制文件,可以使用 QTextStream 类和 QDataStream 类。处理临时文件可以使用 QTemporaryFile, 获取文件信息可以使用 QFilelnfo, 处理目录可以使用 QDir, 监视文件和目录变化可以使用 QFileSystemWatcher 。
读写文本文件的方法通常有两种:一种是直接利用传统的 QFile 类方法;另一种是利用更为方便的 QTextStream 类方法。
二、效果实例
图一
读取文本文件
新建文本文件输入 Welcome to you! 并另存为ANSI格式,将文件改名为textFile.txt 并放在改工程构建的文件夹内。
图二
写入文本文件,生成的文本文件会在构建文件夹中。
三、原码解析
建立基于控制台工程,使用 QFile 类读写文本文件
(I) 建立一个工程。选择“文件" – “新建文件或项目…”菜单项,在弹出的对话框中选择”项目”组下的 “Application” – " Qt Console Application” 选项,单击 “Choose…”按钮。
(2) 在弹出的对话框中对该工程进行命名并选择保存工程的路径,这里将工程命名为"TextFile”, 单击“下一步”按钮,再次单击“下一步”按钮,最后单击“完成”按钮,完成该文件工程的建立。
1. QTextStream 的格式化函数
qSetFieldWidth(int width):设置字段宽度
qSetPadChar(QChar ch):设置填充字符
qSetRealNumberPercision(int precision):设置实数精度
2. QTextStream 的流操作符
bin :设置读写的整数为二进制数
oct :设置读写的整数为八进制数
dec : 设置读写的整数为十进制数
hex :设置读写的整数为十六进制数
showbase :强制显示进制前缀,如十六进制 (0x) 、八进制 (0) 、二进制 (0b)
forcesign :强制显示符号(+, -)
forcepoint :强制显示小数点
noshowbase :不显示进制前缀
noforces1gn :不显示符号
uppercasebase: 显示大写的进制前缀
lowercasebase: 显示小写的进制前缀
uppercasedigits: 用大写字母表示
lowercasedigits: 用小写字母表示
fixed: 用固定小数点表示
scientific: 用科学计数法表示
left : 左对齐
right: 右对齐
center: 居中
endl: 换行
flush: 清除缓冲
3.1、读文本文件原码
main.cpp
#include <QCoreApplication>
#include <QFile>
#include <QtDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QFile file("textFile.txt"); /*打开一个文件有两种方式。一种方式是在构造函数中指定文
件名;另一种方式是使用 setFileName() 函数设置文件名。*/
if (file. open (QIODevice::ReadOnly))/*打开文件使用 open() 函数,关闭文件使用 close()
函数。此处的 open()函数以只读方式打开文件,只读方式参数为 QIODevice:: ReadOnly, 只写方
式参数为 QIODevice::WriteOnly, 读写参数为 QIODevice:: ReadWrite 。*/
{
char buffer[2048];
qint64 lineLen = file.readLine(buffer,sizeof(buffer));/*在 QFile 中可以使用从 QIODevice
中继承的 readLine()函数读取文本文件的一行。*/
if(lineLen!=-1)/*如果读取成功,则 readLine()函数返回实际读取的
字节数;如果读取失败,则返回 "-1" 。*/
{
qDebug ()<<buffer;
}
}
return a.exec();
}
3.2、写文本文件原码
main.cpp
#include <QCoreApplication>
#include <QFile>
#include <QTextStream>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QFile data("data.txt");
if (data. open (QFile::WriteOnly|QFile::Truncate)) /*参数 QFile::Truncate 表示将原来文件
中的内容清空。输出时将格式设为左对齐,占 10 个字符位置。*/
{
QTextStream out(&data);
out<<QObject::tr("")<<qSetFieldWidth(10)<<left<< endl;
out<<QObject::tr("score:")<<qSetFieldWidth(10)<<left<<90<< endl; /*用户使用格式化函
数和流操作符设置需要的输出格式。其中, qSetFieldWidth()函数是设置字段宽度的格式化函数。*/
out<<QObject::tr("score:")<<qSetFieldWidth(10)<<left<<90<< endl;
out<<QObject::tr("score:")<<qSetFieldWidth(10)<<left<<90<< endl;
out<<QObject::tr("score:")<<qSetFieldWidth(10)<<left<<90<< endl;
out<<QObject::tr("score:")<<qSetFieldWidth(10)<<left<<90<< endl;
}
return a.exec();
}
四、总结
Qt5 文件及磁盘处理—— 读写文本文件会在应用程序开发中经常用到的