Qt提供了QFile类用于进行文件操作。QFile类提供了读写文件的接口,可以读写文本文件、二进制文件和Qt的资源文件。
- 处理文本文件,可使用QTextStream类,它可以操作QIODevice/QByteArray和QString。使用QTextStream的流操作符,可以方便地读写单词、行和数字。为了产生文本,QTextStream还提供了填充、对齐和数字格式化的选项。
- 处理二进制文件,可以使用QDataStream类,它提供了将二进制文件穿行化的功能,用于实现C++基本数据类型,如char、short、int、char*等的串行化。更复杂的串行化的操作则是通过数据类型分解为基本类型来完成的。
- 处理临时文件,可使用QTemporaryFile类
- 获取文件信息,可以使用QFileInfo类
- 处理目录可以使用QDir类,QDir类具有存取目录结构和内容的能力,使用它可以操作目录、存取目录或文件信息、操作底层文件系统,而且还可以存取Qt的资源文件。
- 监视文件和目录变化,可以使用QFileSystemWatcher类
处理文本文件
#include <QCoreApplication>
#include <QFile>
#include<QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//打开文件有两种方式,一是在构造函数中指定文件名,另一种是使用setFileName()函数设置文件名
QFile data("data.txt");
// QFile file("textFile1.txt");
//Truncate表示将原来的文件中的内容清空
if(data.open (QIODevice::WriteOnly | QFile::Truncate))
{
QTextStream out(&data);
out<<"score:"<<qSetFieldWidth (10)<<left<<90<<endl;
}
return a.exec();
}
(a) if(data.open(QFile::WriteOnly|QFile::Truncate)):参数QFile::Truncate表示将原来文件中的内容清空。输出时将格式设为左对齐,占10个字符位置。
(b) out<<QObject::tr(“score:”)<<qSetFieldWidth(10)<<left<<90<<endl:用户使用格式化函数和流操作符设置需要的输出格式。其中,qSetFieldWidth()函数是设置字段宽度的格式化函数。除此之外,QTextStream还提供了其他一些格式化函数,见表。
其中,left操作符是QTextStream定义的类似于中的流操作符。QTextStream还提供了其他一些流操作符
目录操作
使用QDir类的entryInfoList()方法,按照某种过滤方式获得目录下的文件列表。
QString root = "/";
QDir rootDir(root);
QStringList string;
string << "*";
QFileInfoList list = rootDir.entryInfoList (string);
函数原型:
/**
* nameFilters 指定了文件名的过滤方式,如“*”,“.tar.gz"
* filters 指定了文件属性的过滤方式,如目录、文件、读写属性
* SortFlags 指定了列表的排序情况
*QFileInfoList entryInfoList(
const QStringList &nameFilters,
Filters filters = NoFilter,
SortFlags sort = NoSort) const;
*/
其中,QDir::Filter定义了一系列的过滤方式:
QDir::SortFlag定义了一系列排序方式: