IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> QFile文件读写 -> 正文阅读

[C++知识库]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();
}

在这里插入图片描述

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 10:59:30  更:2022-05-05 11:01:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 1:24:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码