一.QFile类
QFile提供了从文件中读取和写入数据的能力。
我们通常会将文件路径作为参数传给QFile的构造函数。不过也可以在创建好对象最后,使用setFileName()来修改。
QFile是QIODevice的子类,利用QFile可以对文件进行打开,读取,写入的操作。
可以使用QDataStream或QTextStream类来读写文件,也可以用QIODevice类自带的read()、readLine()、readAll()以及write()这样的函数。
获取一个文件的信息使用QFileInfo类。
二.读取文件/写入文件
1.直接使用其自带的读写函数read/write读取
cpp
// File类读取
QFile file("C:\\Users\\SlanderMC\\Desktop\\111.txt");
file.open(QIODevice::ReadOnly|QIODevice::Text);
char text[5000];
file.read(text,5000);
qDebug()<<text;
file.close();
//File类创建写入
QFile file2("C:\\Users\\SlanderMC\\Desktop\\222.txt");
file2.open(QIODevice::WriteOnly|QIODevice::Text);
file2.write("123456");
file2.close();
打开函数open,内部参数指的是打开文件的方式
QIODevice::NotOpen 未打开
QIODevice::ReadOnly 以只读方式打开
QIODevice::WriteOnly 以只写方式打开
QIODevice::ReadWrite 以读写方式打开
QIODevice::Append 以追加的方式打开,新增加的内容将被追加到文件末尾
QIODevice::Truncate 以重写的方式打开,在写入新的数据时会将原有
QIODevice::Truncate 以重写的方式打开,在写入新的数据时会将原有 数据全部 清除,游标设置在文件开头。
QIODevice::Text 在读取时,将行结束符转换成 \n;在写入时, 将行结束符转换成本地格式,例如 Win32 平台上是 \r\n
QIODevice::Unbuffered 忽略缓存
2.使用QTextStream类写入和读取文件
读入可以使用readline逐行读入,也可以使用read设置大小读入
写入时,可直接使用<<重载运算符
cpp
//通过QTextStream读写文件
QFile file("C:\\Users\\SlanderMC\\Desktop\\111.txt") ;
file.open(QIODevice::ReadWrite|QIODevice::Text);
QTextStream stream(&file);
//读
stream.setEncoding(QStringConverter::Utf8);
// QString s = stream.read(file.size());
// qDebug()<<s;
while(!stream.atEnd())
{
QString s = stream.readLine();
qDebug()<<s;
}
//写
stream<<"1111111";
三.QT中文件对话框QFileDialog
QFileDialog::getOpenFileName(parent,"对话框名称","默认打开文件夹","文件类型");
返回值:QString 返回选择的文件名称filename
示例:
cpp
QString filename = QFileDialog::getOpenFileName
(this,"文件选择","C:\\Users\\SlanderMC\\Desktop",tr("Text (*.txt *.doc)"));
四.自定义记事本,实现文件读取,文件保存
为按钮设置信号槽,左一按钮为打开文件,左二按钮为保存文件。
利用QFileDialog选择文件,再利用QFile类打开文件,最后使用QTextStream读取和写入文件。实现功能。
cpp
void Widget::on_btnopen_clicked()
{
//文件内容显示到编辑栏中
QString filename = QFileDialog::getOpenFileName(this,"open","C:\\Users\\SlanderMC\\Desktop");
QFile file(filename);
file.open(QIODevice::ReadOnly|QIODevice::Text);
QTextStream stream(&file);
stream.setEncoding(QStringConverter::Utf8);
QString str = stream.readAll();
ui->textEdit->setText(str);
file.close();
}
void Widget::on_btnsave_clicked()
{
//编辑后的内容保存到文件
QString strsave = QFileDialog::getSaveFileName(this,"保存文件","C:\\Users\\SlanderMC\\Desktop");
QFile file(strsave);
file.open(QIODevice::WriteOnly|QIODevice::Text);
QTextStream stream(&file);
stream<<ui->textEdit->toPlainText();
file.close();
}