19基本文件操作
Posted gd-luojialin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了19基本文件操作相关的知识,希望对你有一定的参考价值。
文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库,提供了跨平台的文件操作能力。在所有的 I/O 设备中,文件 I/O 是最重要的部分之一。因为我们大多数的程序依旧需要首先访问本地文件(当然,在云计算大行其道的将来,这一观点可能改变)。QFile提供了从文件中读取和写入数据的能力。
我们通常会将文件路径作为参数传给QFile的构造函数。不过也可以在创建好对象最后,使用setFileName()来修改。QFile需要使用 / 作为文件分隔符,不过,它会自动将其转换成操作系统所需要的形式。例如 C:/windows 这样的路径在 Windows 平台下同样是可以的。
QFile主要提供了有关文件的各种操作,比如打开文件、关闭文件、刷新文件等。我们可以使用QDataStream或QTextStream类来读写文件,也可以使用QIODevice类提供的read()、readLine()、readAll()以及write()这样的函数。值得注意的是,有关文件本身的信息,比如文件名、文件所在目录的名字等,则是通过QFileInfo获取,而不是自己分析文件路径字符串。
思路:给定路径,打开文件,读取内容(写入内容)
例子:在设计器中添加一个编辑框,两个按钮(读,写)。读,将文件中内容读取并显示在编辑框中。写,将编辑框中的内容写入一个新建的文件。对应按钮槽函数代码如下:
头文件:
#include <QFileDialog>
#include <QFile>
读文件操作
void Widget::on_btnRead_clicked()
{
QString strReadPath=QFileDialog::getOpenFileName(this,"Read","../","*.txt");
if(strReadPath.isEmpty()==false)
{
//QFile readFile(strReadPath);
//创建文件对象
QFile readFile;
//关联文件名字
readFile.setFileName(strReadPath);
//打开文件,只读方式
bool bIsOk=readFile.open(QIODevice::ReadOnly);
if(bIsOk==true)
{
//一次性读取
// QByteArray arr=readFile.readAll();
//按行读取
QByteArray arr;
while(!readFile.atEnd())
{
arr+=readFile.readLine();
}
//显示在编辑框
ui->textEdit->setText(QString(arr));
}
//关闭文件
readFile.close();
}
}
写文件操作
void Widget::on_btnWrite_clicked()
{
QString strWritePath=QFileDialog::getSaveFileName(this,"Write","../");
if(strWritePath.isEmpty()==false)
{
QFile writeFile(strWritePath);
//打开文件,只写方式
bool bIsOK=writeFile.open(QIODevice::WriteOnly);
if(bIsOK==true)
{
//从编辑框获取
QString strBuf=ui->textEdit->toPlainText();
//写入文件
//QString->QByteArray
//writeFile.write(strBuf.toUtf8());
//QString->C++ string->char*
writeFile.write(strBuf.toStdString().data());
//本地平台编码
//writeFile.write(strBuf.toLocal8Bit());
}
writeFile.close();
}
}
不同编码间的转换:
//QString->QByteArray
Qstring buf=”123”;
QbyteArray a=buf.toUtf8();
a=buf.toLocal8Bit(); //本地平台编码,Windows默认是ANSI, QT默认uft-8
//QbyteArrya->char*
char *b=a.data();
//char *->Qstring
char *p=”abcd”;
Qstring str=Qstring(p);
获取文件基本信息
头文件:
#include <QFileInfo>
#include <QDateTime>
#include <QDebug>
QFileInfo info(readFile); //指定文件路径
qDebug()<<"文件名:"<<info.fileName();
qDebug()<<"文件大小:"<<info.size();
qDebug()<<"文件格式:"<<info.suffix();
qDebug()<<"文件创建时间:"<<info.created().toString("yyyy-MM-dd hh:mm:ss");
//如:2018-1-1 11:25:25
可以使用QFileInfo获取有关该文件的信息。
QFileInfo有很多类型的函数,我们只举出一些例子。比如:
? isDir() 检查该文件是否是目录;
? isExecutable() 检查该文件是否是可执行文件等。
? baseName() 可以直接获得文件名;
? completeBaseName() 获取完整的文件名
? suffix() 则直接获取文件后缀名。
? completeSuffix() 获取完整的文件后缀
我们可以由下面的示例看到,baseName()和completeBaseName(),以及suffix()和completeSuffix()的区别:
QFileInfo fi("/tmp/archive.tar.gz");
QString base = fi.baseName(); // base = "archive"
QString base = fi.completeBaseName(); // base = "archive.tar"
QString ext = fi.suffix(); // ext = "gz"
QString ext = fi.completeSuffix(); // ext = "tar.gz"
以上是关于19基本文件操作的主要内容,如果未能解决你的问题,请参考以下文章