目录
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();