文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库,提供了跨平台的文件操作能力。在所有的I/O设备中,文件 I/O 是最重要的部分之一。因为我们大多数的程序依旧需要首先访问本地文件(当然,在云计算大行其道的将来,这一观点可能改变)。QFile 提供了从文件中读取和写入数据的能力。我们通常会将文件路径作为参数传给QFile 的构造函数。不过也可以在创建好对象后,使用setFileName() 来修改。QFile 需要使用 / 作为文件分隔符,不过,它会自动将其转换成操作系统所需要的形式。例如:C:/windows 这样的路径在windows 平台下同样是可以的。
QFile只要提供了有关文件的各种操作,比如打开文件、关闭文件、刷新文件等。我们可以使用QDataStream 或 QTextStream 类来读写文件,也可以使用QIODevice类提供的read()、readLine()、readALL()、以及write()这样的函数。值得注意的是,有关文件本身的信息,比如文件名、文件所在目录的名字等,则是通过QFileInfo获取,而不是自己分析文件路径字符串。
两个 Push Button 命名为 readfile 、writefile。
并 “转到槽”
readfile 读文件函数
void Widget::on_pushButton_clicked()
{
QString path = QFileDialog::getOpenFileName(this,
"open","","TXT(*.txt)");
if(path.isEmpty() == false)
{
//文件对象
QFile file(path);
//打开文件,只读方式
bool isOK = file.open(QIODevice::ReadOnly);
if(isOK == true)
{
#if 0
//读文件 默认只识别 uft8编码
QByteArray array = file.readAll();
//显示到编辑区
//ui->textEdit->setText(QString(array));
ui->textEdit->setText(array);
#endif
QByteArray array;
while(file.atEnd() == false)
{
//读一行
array += file.readLine();
}
ui->textEdit->setText(array);
}
//关闭文件
file.close();
//获取文件信息
QFileInfo info(path);
qDebug()<<"文件名字:"<<info.fileName().toUtf8().data();
qDebug()<<"文件后缀:"<<info.suffix();
qDebug()<<"文件大小:"<<info.size();
qDebug()<<"文件创建时间:"<<info.created().toString("yyyy-MM-dd hh:mm:ss");
}
}
writefile 写文件函数
void Widget::on_pushButton_2_clicked()
{
QString path = QFileDialog::getSaveFileName(this,
"save","","TXT(*.txt)");
if(path.isEmpty() == false)
{
QFile file; //创建文件对象
//关联文件名字
file.setFileName(path);
//打开文件,只写方式
bool isOK = file.open(QIODevice::WriteOnly);
if(isOK == true)
{
//获取编辑区内容
QString str = ui->textEdit->toPlainText();
//写文件
//QString -> QByteArray
file.write(str.toUtf8());
//QString -> c++ string -> char *
file.write(str.toStdString().data());
//转换为本地编码
file.write(str.toLocal8Bit());
}
file.close();
}
}
效果:
小提示,Qt 字符类型转换
//QString -> QByteArray
QString buffer = "123456";
QByteArray ay = buffer.toUtf8();//中文
ay = buffer.toLocal8Bit();//本地编码
//QByteArray -> char *
char *b = ay.data();
//char * -> QString
char *p = "QStr";
QString c = QString(p);