目录
1.读文件
2.写文件及编码格式
2.1写文件
2.2编码格式
3.文件信息读取
4.文件流
4.1QTextStream
4.2QDataStream
1.读文件
需求:一个pushButton,点击之后可以选择一个txt文件的路径,路径会显示在lineEdit上,txt文件的内容会显示在textEdit上
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);connect(ui->pushButton,&QPushButton::clicked,[=]{QString filePath=QFileDialog::getOpenFileName(this,"打开文件","E:\\Qt\\File");ui->lineEdit->setText(filePath);QFile file(filePath);file.open(QIODevice::ReadOnly);QByteArray arr;arr=file.readAll();ui->textEdit->setText(arr);file.close();});
}
- file.open(QIODevice::ReadOnly)——读取方式QIODevice::ReadOnly或QFile::ReadOnly
- readAll()——将文件内容一次性全部读取
- readLine()——按行读取文件信息,atEnd()判断文件是否读到了尾部,如下:
//arr=file.readAll();while(!file.atEnd())
{arr += file.readLine();
}
2.写文件及编码格式
2.1写文件
QFile file(filePath);file.open(QFileDevice::Append);file.write("你好");file.close();
- QFileDevice::WriteOnly会覆盖之前写的内容
- QFileDevice::Append会实现追加写入
2.2编码格式
Qt默认支持的编码格式是utf-8。读取其他格式的文件时,需要将文本设置为指定的格式再进行读取,如“gbk”格式。
//文本的编码方式QTextCodec* codec=QTextCodec::codecForName("gbk");QByteArray arr;arr=file.readAll();//将文本设置为gbk编码格式ui->textEdit->setText(codec->toUnicode(arr));
3.文件信息读取
QFileInfo提供了文件名称、位置、后缀名、是否为目录等信息,可以获取文件大小、最后修改时间、读取时间
QFileInfo info(filePath);qDebug()<<"文件名称:"<<info.fileName()<<"文件路劲:"<<info.filePath()<<"后缀名:"<<info.suffix()<<"文件大小:"<<info.size();qDebug()<<"创建日期:"<<info.created().toString("yyy-MM-dd hh:mm:ss");<<"最后修改日期:"<<info.lastModified().toString("yyy-MM-dd hh:mm:ss");
4.文件流
4.1QTextStream
处理文本数据,对Qt的字符串和I/O类进行了优化,可以使用<<或>>读写数据
【写数据】
QFile file("C:\\Users\\zjx\\Desktop\\1.txt");file.open(QFileDevice::WriteOnly);QTextStream stream(&file);stream<<QString("123")<<123456;file.close();
【读数据】
QFile file("C:\\Users\\zjx\\Desktop\\1.txt");file.open(QFileDevice::ReadOnly);QTextStream readStream(&file);QString arr=readStream.readAll();qDebug()<<arr;file.close();
4.2QDataStream
用于处理二进制数据,可以序列化Qt的数据类型为二进制格式,并能从二进制格式中反序列化它们,注意要按照数据类型读取数据
【写文件】
QFile file("C:\\Users\\zjx\\Desktop\\1.txt");file.open(QFileDevice::WriteOnly);QDataStream stream(&file);stream<<QString("123")<<123456;file.close();
原因:文件是二进制的方式写入的
【读文件】
QFile file("C:\\Users\\zjx\\Desktop\\1.txt");file.open(QFileDevice::ReadOnly);//声明数据类型,按照数据类型读取数据QString str;int num;QDataStream stream(&file);stream>>str>>num;qDebug()<<str<<num;file.close();