简介
QFile类提供了一个读取和写入文件的接口,一个读写文本、二进制文件和资源的I/O设备。 QFile读写文件的两种方式: 1.QFile可以单独使用。 2.QFile与QTextStream或QDataStream一起使用。 注意:不管操作系统是什么,QFile都希望文件分隔符是’/‘。不支持使用其他分隔符(例如’')。
常用api
设置文件路径名,可以通过构造函数传参
QFile(const QString &name)
也可以通过以下函数
void setFileName(const QString &name)
使用 QFile 读写文件之前必须先打开文件
bool open(FILE *fh, QIODevice::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)
bool open(int fd, QIODevice::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)
QFile常用打开文件的方式 QIODevice::ReadOnly:只能对文件进行读操作 QIODevice::WriteOnly:只能对文件进行写操作,如果目标文件不存在,会自行创建一个新文件 QIODevice::ReadWrite : 能对文件进行读和写操作 QIODevice::Append : 以追加模式打开设备,以便将所有数据写到文件的末尾。 QIODevice::Truncate:以重写模式打开,写入的数据会将原有数据全部清除。注意,此打开方式不能单独使用,通常会和 ReadOnly 或 WriteOnly 搭配。 QIODevice::Text:读取时,行末终止符被翻译为’\n’。在写入时,行末终止符被转换为本地编码,例如Win32的’\r\n’。 根据需要,文件的打开方式可以一次性指定多个值,值和值之间用|分割。比如: QIODevice::WriteOnly | QIODevice::Text:表示只允许对文件进行写操作,将数据写入文件时,会将行尾结束符转换为本地格式;
文件中一次性最多读取 maxSize 个字节,然后返回读取到的字节。
qint64 read(char *data, qint64 maxSize)
读取文件中所有的数据。
QByteArray QIODevice::readAll()
每次从文件中读取一行数据或者读取最多 maxSize-1 个字节,存储到 data 中。返回实际读取到的字节数。
qint64 readLine(char *data, qint64 maxlen);
从文件中读取一行,但不超过maxSize字符,并以字节数组的形式返回结果。
QByteArray readLine(qint64 maxlen = 0);
写入数据,返回实际写入的字节数
qint64 write(const char *data)
qint64 write(const QByteArray &byteArray)
当前由fileName()指定的文件重命名为newName。如果成功返回true;否则返回false。
bool rename(const QString &newName)
将当前由fileName()指定的文件复制到名为newName的文件。如果成功返回true;否则返回false。
bool copy(const QString &newName)
移除当前文件。如果成功返回true;否则返回false。
bool remove()
QFile类读写文件
void byQFile()
{
QFile file(QCoreApplication::applicationDirPath()+"/ini.txt");
if(!file.open(QIODevice::WriteOnly|QIODevice::Text)){
qDebug()<<"文件打开失败";
}
file.write(QString(QStringLiteral("春眠不觉晓\n")).toStdString().c_str());
file.write(QString(QStringLiteral("处处闻啼鸟\n")).toStdString().c_str());
file.write(QString(QStringLiteral("夜来风雨声\n")).toStdString().c_str());
file.write(QString(QStringLiteral("花落知多少\n")).toStdString().c_str());
file.close();
if(!file.open(QIODevice::ReadOnly|QIODevice::Text)){
qDebug()<<"文件打开失败";
}
while (!file.atEnd()) {
QByteArray line = file.readLine();
qDebug()<<line.toStdString().c_str();
}
file.close();
}
打印输出
QFile+QTextStream读写文件
QTextStream 类常用的一些方法
QTextStream构造函数,需要传入QFile对象。
QTextStream(QIODevice *device)
从文件中读取所有内容,读取内容已QString 字符串返回
QString readAll()
读取一行,如果手动指定 maxlen 的值,则最多读取 maxlen 个字符,读取内容已QString 字符串返回
QString readLine(qint64 maxlen = 0)
QTextStream还提供了格式化的方法。
void setFieldWidth(int width)
void setFieldAlignment(QTextStream::FieldAlignment mode)
void setNumberFlags(numberFlags() | ForceSign)
void byQFileAndStream()
{
QFile file(QCoreApplication::applicationDirPath()+"/ini.txt");
if(!file.open(QIODevice::WriteOnly|QIODevice::Text)){
qDebug()<<"文件打开失败";
}
QTextStream in(&file);
in << QString(QStringLiteral("春眠不觉晓\n"))\
<< QString(QStringLiteral("处处闻啼鸟\n"))\
<< QString(QStringLiteral("夜来风雨声\n"))\
<< QString(QStringLiteral("花落知多少\n"));
file.close();
if(!file.open(QIODevice::ReadOnly|QIODevice::Text)){
qDebug()<<"文件打开失败";
}
QTextStream out(&file);
while(!out.atEnd()){
QString str;
out >> str;
qDebug() << str;
}
file.close();
}
|