一、QFile读写文本

//例1
QFile file("textFile1.txt");
if(file.open(QIODevice::ReadOnly)) //以只读方式打开文件
{
char buffer[2048];
//读取一行数据
qint64 lineLen = file.readLine(buffer,sizeof(buffer));
if(lineLen!=-1) //读取失败返回-1
{
qDebug()<<buffer;
}
}
//例2
QFile file("in.txt");
//QIODevice::Text:将("\r\n")转换C++风格("\n")
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;

while (!file.atEnd()) {
QByteArray line = file.readLine();
process_line(line);
}

二、QTextStream读写文本

//例1
QFile data("data.txt");
//QFile::Truncate:将原来文件中的内容清空
if(data.open(QFile::WriteOnly|QFile::Truncate))
{
QTextStream out(&data);
//qSetFieldWidth:设置字段宽度
//left:左对齐
out<<QObject::tr("score:")<<qSetFieldWidth(10)<<left<<90<<endl;
}
//例2
QFile file("in.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
//转换成流,因为以QIODevice::ReadOnly打开,所以是输入流
QTextStream in(&file);
while (!in.atEnd()) {
QString line = in.readLine();
process_line(line);
}
//例3
QFile file("out.txt");
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
return;

QTextStream out(&file);
out << "The magic number is: " << 49 << "\n";

三、读写二进制文件

QFile file("binary.dat");
file.open(QIODevice::WriteOnly | QIODevice::Truncate);
QDataStream out(&file); //将数据序列化
out << QString(tr("周何骏:")); //字符串序列化
out << QDate::fromString("1994/09/25", "yyyy/MM/dd");
out << (qint32)19; //整数序列化
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();