QFile 类用于文件操作,它提供了读写文件的接口,可以读写文件、二进制件和 Qt 资源文件。
处理文本文件和二进制文件,可以使用 QTextStream 类和 QDataStream 类,处理临时文件可以使用 QTemporaryFile,获取信息可以使用 QFileInfo,处理目录可以使用 QDir,监视文件和目录变化可以使用 QFileSystemWatcher。
1、QTextStream的操作符
2、读写
QFile file("hello.txt");
//读文件
if( file.open(QIODevice::ReadOnly) ){
char buff[100];
qint32 m;
m = file.readLine(buff,sizeof(buff));
if( m!= -1){
qDebug() << "长度" <<m
<< "内容" <<buff
<<endl;
file.close();
}
}else{
qDebug() << file.errorString();
}
double db = 3.1415926;
int age = 10;
QFile datafile;
datafile.setFileName("hello.txt");
//写文件
if( datafile.open(QFile::WriteOnly | QFile::Truncate) ){
QTextStream out(&datafile);
out.setRealNumberPrecision(8);//控制精度
out.setFieldWidth(10);//字段宽度
out.setFieldAlignment(QTextStream::AlignLeft);//对齐方式
out<<QString("PI:")
<<db
<<hex //进制转化
<<age;
}
3、二进制读写
#include <QCoreApplication>
#include<QFile>
#include<QDate>
#include<QDebug>
#include<QDataStream>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//二进制写
QFile binfile("infi.bat");
if( binfile.open(QIODevice::WriteOnly|QIODevice::Truncate) ){
QDataStream out(&binfile);
out << QString("梅川酷子")
<<QDate::fromString("2023-02-26","yyyy-MM-dd")
<<(qint32)23;
binfile.close();
}else{
binfile.errorString();
}
//读
binfile.setFileName("infi.bat");
if( binfile.open(QIODevice::ReadOnly) ){
QDataStream in(&binfile);
//按写入格式读
QString name;
QDate birthday;
qint32 age;
in >> name >> birthday >> age;
qDebug() << name << birthday << age;
binfile.close();
}
return a.exec();
}
4、QFileInfo
void fileInfo::getFileInfo(QString &fileName)
{
QFileInfo info(fileName);
ui->fileSizeLineEdit->setText(QString::number(info.size()));//文件大小,int类型转化为QString
ui->createLineEdit->setText(info.created().toString());//创建时间,返回类型为QDateTime转化为QString类型
ui->alterLineEdit->setText(info.lastModified().toString());//最后修改时间
ui->visitLineEdit->setText(info.lastRead().toString());//最后访问时间
ui->DiacheckBox->setChecked(info.isDir());//是否为目录
ui->filecheckBox->setChecked(info.isFile());//文件
ui->linkcheckBox->setChecked(info.isSymLink());//符号链接
ui->concelcheckBox->setChecked(info.isHidden());//隐藏文件
ui->readcheckBox->setChecked(info.isReadable());//读
ui->writecheckBox->setChecked(info.isWritable());//写
ui->executecheckBox->setChecked(info.isExecutable());//执行
}
void fileInfo::on_browstBtn_clicked()
{
QString filename = QFileDialog::getOpenFileName(this,"打开文件",".","files(*)");
ui->fileNameLineEdit->setText(filename);
getFileInfo(filename);
}