二十七、读写文件

二十七、读写文件

27.1 文件类QFile

cpp 复制代码
#include <QCoreApplication>

#include<QFile>
#include<QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QFile file("D:/main.txt");

    if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
        qDebug()<<"打开文件失败";
    else
        qDebug()<<"打开文件成功";

    file.write("Qt编程");
    file.close();

    if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
        qDebug()<<"打开文件失败";
    else
        qDebug()<<"打开文件成功";

    char *str=new char[200];
    qint64 count=file.readLine(str,200);

    while((count!=0) && (count!=-1))
    {
        qDebug()<<str;
        count=file.readLine(str,200);
    }

    file.close();

    return a.exec();
}

这段代码是一个简单的文件读写示例,主要包括以下几个步骤:

  1. 创建一个QFile对象,指定文件路径为D:/main.txt。

  2. 以只写和文本模式打开文件,如果打开失败则输出"打开文件失败",否则输出"打开文件成功"。

  3. 向文件中写入字符串"Qt编程"。

  4. 关闭文件。

  5. 以只读和文本模式打开文件,如果打开失败则输出"打开文件失败",否则输出"打开文件成功"。

  6. 创建一个长度为200的字符数组,使用file.readLine()方法读取文件中的一行数据,将数据存储到字符数组中,并返回读取的字节数。

  7. 循环读取文件中的每一行数据,直到读取到文件末尾或者读取失败。

  8. 输出读取到的每一行数据。

  9. 关闭文件。

qint64 QIODevice::readLine(char *data, qint64 maxSize):

该函数从设备读取一行ASCII字符(最大maxSize - 1字节),将字符存储在data中,并返回读取的字节数。如果一行无法读取但没有发生错误,则此函数返回0。如果发生错误,此函数返回可读取内容的长度,如果没有读取,则返回-1。

结束的'\0'字节总是附加到data后,因此maxSize必须大于1。

一直读取数据,直到满足以下条件之一:

读取第一个'\n'字符。

maxSize -读取1个字节。

设备数据结束检测

27.2 读写二进制文件QDataStream和QTextStream

cpp 复制代码
#include <QCoreApplication>

#include<QFile>
#include<QDebug>
#include<QTextStream>
#include<QDataStream>
#include<QString>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QFile file("D:/main.txt");

    if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
        qDebug()<<"打开文件失败";
    else
        qDebug()<<"打开文件成功";

    QTextStream textStreamWrite(&file);
    textStreamWrite<<(QString)"Qt开发编程";
    file.close();

    if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
        qDebug()<<"打开失败";
    else
        qDebug()<<"打开成功";

    QTextStream textStreamRead(&file);

    while(!textStreamRead.atEnd())
    {
        QString str;
        textStreamRead>>str;
        qDebug()<<str;
    }

    file.close();

    return a.exec();
}

这段代码主要是演示了如何使用Qt库中的QFile、QTextStream和QDataStream类来读写文件。具体来说,代码首先创建一个名为main.txt的文件,并向其中写入一行文本"Qt开发编程",然后再次打开该文件并读取其中的文本内容,并将其输出到控制台。代码中使用了QTextStream类来进行文本的读写操作,同时使用了QIODevice::ReadOnly和QIODevice::WriteOnly来指定文件的打开模式。

bool QTextStream::atEnd() const:

如果没有更多的数据要从QTextStream中读取,则返回true;否则返回false。这与调用QIODevice::atEnd()类似,但不相同,因为QTextStream也会考虑其内部Unicode缓冲区。

相关推荐
十八度的天空22 分钟前
第01节 Python的基础语法
开发语言·python
OliverH-yishuihan29 分钟前
在win10上借助WSL用VS2019开发跨平台项目实例
linux·c++·windows
yue00834 分钟前
C# 字符串倒序
开发语言·c#
强子感冒了41 分钟前
Java学习笔记:String、StringBuilder与StringBuffer
java·开发语言·笔记·学习
低保和光头哪个先来1 小时前
场景6:对浏览器内核的理解
开发语言·前端·javascript·vue.js·前端框架
小北方城市网1 小时前
Python + 前后端全栈进阶课程(共 10 节|完整版递进式|从技术深化→项目落地→就业进阶,无缝衔接基础课)
大数据·开发语言·网络·python·数据库架构
程序员JerrySUN1 小时前
OP-TEE + YOLOv8:从“加密权重”到“内存中解密并推理”的完整实战记录
android·java·开发语言·redis·yolo·架构
阿里嘎多学长1 小时前
2025-12-30 GitHub 热点项目精选
开发语言·程序员·github·代码托管
汉克老师1 小时前
GESP2025年12月认证C++二级真题与解析(编程题1 (环保能量球))
c++·gesp二级·gesp2级
郝学胜-神的一滴1 小时前
Linux进程与线程控制原语对比:双刃出鞘,各显锋芒
linux·服务器·开发语言·数据结构·c++·程序人生