文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库,提供了跨平台的文件操作能力。Qt 通过QIODevice提供了对 I/O 设备的抽象,这些设备具有读写字节块的能力。下面是 I/O 设备的类(Qt5):
QIODevice:所有 I/O 设备类的父类,提供了字节块读写的通用操作以及基本接口;
QFileDevice:Qt5新增加的类,提供了有关文件操作的通用实现。
QFlie:访问本地文件或者嵌入资源;
QTemporaryFile:创建和访问本地文件系统的临时文件;
QBuffer:读写QbyteArray, 内存文件;
QProcess:运行外部程序,处理进程间通讯;
QAbstractSocket:所有套接字类的父类;
QTcpSocket:TCP协议网络数据传输;
QUdpSocket:传输 UDP 报文;
QSslSocket:使用 SSL/TLS 传输数据;
简单的文件读写代码如下:
mywidget.h
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class MyWidget; }
QT_END_NAMESPACE
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(QWidget *parent = nullptr);
~MyWidget();
private slots:
void on_ButtonRead_clicked();//ui中直接右击转到槽时自动添加的
void on_ButtonSave_clicked();
private:
Ui::MyWidget *ui;
};
#endif // MYWIDGET_H
mywidget.cpp
#include "mywidget.h"
#include "ui_mywidget.h"
#include<QFile>
#include<QFileDialog>
#include<QFileInfo> //F1
#include<QDebug>
#include<QDateTime>
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::MyWidget)
{
ui->setupUi(this);
}
MyWidget::~MyWidget()
{
delete ui;
}
void MyWidget::on_ButtonRead_clicked()
{
QString path=QFileDialog::getOpenFileName(this,"open_File","../07_QFile","*.*");
if(!path.isEmpty())
{
//创建文件对象
QFile file(path);
//打开文件,只读方式
bool isOK=file.open(QIODevice::ReadOnly);
if(isOK)
{
#if 0
//读文件,默认只可以识别utf8编码
QByteArray array=file.readAll();
//显示到编辑区
//ui->textEdit->setText(QString(array));
ui->textEdit->setText(array);
#endif
#if 1
QByteArray array;
while(file.atEnd()==false)
{
//读一行
array+=file.readLine();
}
ui->textEdit->setText(array);
#endif
}
//关闭文件
file.close();
//获取文件信息
QFileInfo info(path);
qDebug()<<"文件名:"<<info.fileName().toUtf8().data();//QString-->QByteArray-->char*
qDebug()<<"文件后缀:"<<info.suffix();
qDebug()<<"文件大小:"<<info.size()/1024<<"KB";
qDebug()<<"文件创建时间:"<<
info.birthTime().toString("yyyy-MM-dd");
}
}
void MyWidget::on_ButtonSave_clicked()
{
QString path= QFileDialog::getSaveFileName(this,"save_File","../07_QFile","TXT(*.txt)");
if(!path.isEmpty())
{
//QFile file(path);
QFile file;
file.setFileName(path);
//打开方式,只写
bool isOK=file.open(QIODevice::WriteOnly);
if(isOK)
{
//获取编辑区内容
QString str=ui->textEdit->toPlainText();
//写文件
//QString-->QByteArray
file.write(str.toUtf8());
#if 0
//QString-->c++string-->char*
file.write(str.toStdString().data());
//转换为本地平台编码
file.write(str.toLocal8Bit());
#endif
}
file.close();
}
}
QByteArray–>char*
QByteArray a;
char*b=a.data();
char*–>QString
char* p="abc";
QString c=QString(p);