QFile文件读写

简介

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 对象,指定文件的路径
    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还提供了格式化的方法。

//设置每份数据占用的位置宽度为 width。
void setFieldWidth(int width)
//设置对齐方式
void setFieldAlignment(QTextStream::FieldAlignment mode)
//设置将数字写入文件时,带上正负号。
void setNumberFlags(numberFlags() | ForceSign)	
void byQFileAndStream()
{
    
    
    //创建 QFile 对象,指定文件的路径
    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();
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44901043/article/details/124558660
今日推荐