QT——文件IO
QFile 类
构造函数
QFile() 无参构造
仅仅构建一个QFile 对象,不设定文件名
QFile(文件名)
构建一个QFile对象的同时,设定文件名
但是注意,仅仅设定文件名,并不会打开该文件
设定文件名
QFile file
file.setFileName(文件名)
并不会打开
打开文件
file.open(打开模式)
文件写
qint64 write(const char *data, qint64 maxSize)
file.write(数据,数据长度)//将data,最多maxSize个字节,写入file代表的文件中
qint64 write(const char *data)
file.write(数据)//将data,到结束符为止,写入file代表的文件中
qint64 write(const QByteArray &byteArray)
QByteArray本质是c语言的字符数组,做一段内存来管理
我们的数据一般是一个 QString 对象
so要将一个 QString 对象转换成 QByteArray 对象:
QString str = "hello"//QString,有toLocal8Bit() :将QString转换成 QByteArray
QByteArray qarr = str.toLocal8Bit();
class Widget : public QWidget
{
public:
Widget(QWidget *parent = nullptr);
~Widget();
void save_data(const QString &filename,const QString &data);
private:
Ui::Widget *ui;
QFile file;
};
Widget::~Widget()
{
QString name=ui->lineEdit->text();
save_data("D:/name.text",name);
delete ui;
}
void Widget::save_data(const QString &filename, const QString &data)
{
file.setFileName(filename);
file.open(QFile::WriteOnly);
file.write(data.toLocal8Bit());
file.close();
}
文件读
qint64 read(char *data, qint64 maxSize)
char buf[64] = {0}
file.read(buf,64)//从file文件中读取最多64个字节的数据,并且将读取到的数据写入buf中
返回读取到的数据的字节数
QByteArray read(qint64 maxSize)
QByteArray qarr = file.read(64)// 从file文件中,读取最多64个字节的数据,并且将读取到的数据,构建成一个QByteArray对象后返回
将 QByteArray 数据,转换成 QString 数据
1:在QByteArray 寻找,返回值是 QString,函数名是toXXXX,形参没有的函数
2:在QString的构造函数,寻找参数为 QByteArray 的构造函数
不支持中文
3:在QString的静态方法,寻找返回值为 QString,参数是 QByteArray的函数
找到 fromLocal8Bit(),支持中文
QByteArray readAll()
QByteArray arr = file.readAll()// 读取文件中的全部数据
//将读取到的数据,构建成 QByteArray 后返回
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QString name=load_data("D:name.text");
ui->lineEdit->setText(name);
}
QString Widget::load_data(const QString &filename)
{
file.setFileName(filename);
file.open(QFile::ReadOnly);
QByteArray barr=file.readAll();
QString str=QString::fromLocal8Bit(barr);
file.close();
return str;
}