C/C++ Qt 基本文件读写的基本使用(2种实现)

 更新时间:2021年11月26日 10:40:58   作者:lyshark  
文件的读写是很多应用程序具有的功能,本文主要介绍了两种实现方法,第一种使用QFile类的IODevice读写功能直接读写,第二种是利用 QFile和QTextStream结合起来,用流的方式进行文件读写

文件的读写是很多应用程序具有的功能,甚至某些应用程序就是围绕着某一种格式文件的处 理而开发的,所以文件读写是应用程序开发的一个基本功能。

Qt文件操作有两种方式,第一种使用QFile类的IODevice读写功能直接读写,第二种是利用 QFile和QTextStream结合起来,用流的方式进行文件读写。

第一种,利用QFile中的相关函数,实现对文件的读写操作,QFile会调用IODevice设备,从而实现文件读写。

QT基本文件读写

通过QFile实现文本文件读写操作.

#include <QCoreApplication>
#include <iostream>
#include <QFile>
#include <QString>
#include <QTextStream>

// 一次读入所有文本
bool ReadFileOnly(const QString &file_path)
{
    QFile ptr(file_path);

    // 文件是否存在
    if(!ptr.exists())
    {
        return false;
    }

    // 文件是否打开
    /*
    ReadOnly   以只读方式打开
    WriteOnly  以只写方式打开
    ReadWrite  读写方式打开
    Append     以追加方式打开
    Truncate   以截取方式打开(原有内容被清空)
    Text       以文件方式打开
    */

    if(!ptr.open(QIODevice::ReadWrite | QIODevice::Text))
    {
        return false;
    }

    QString text = ptr.readAll();
    std::cout << text.toStdString() << std::endl;
    ptr.close();
}

// 追加写入文本
bool WriteFileOnly(const QString &file_path, QString save)
{
    // 如果参数为空则返回假
    if(file_path.isEmpty() && save.isEmpty())
    {
        return false;
    }

    QFile ptr(file_path);
    if(!ptr.open(QIODevice::Append | QIODevice::Text))
    {
        return false;
    }

    QByteArray str_bytes = save.toUtf8();

    ptr.write(str_bytes,str_bytes.length());
    ptr.close();
    return true;
}

QFile::open() 函数打开文件时需要传递 QIODevice::OpenModeFlag 枚举类型的参数,决定文件以什么方式打开,QIODevice::OpenModeFlag 类型的主要取值如下:

QIODevice::ReadOnly:以只读方式打开文件,用于载入文件。

QIODevice::WriteOnly:以只写方式打开文件,用于保存文件。

QIODevice::ReadWrite:以读写方式打开。

QIODevice::Append:以添加模式打开,新写入文件的数据添加到文件尾部。

QIODevice::Truncate:以截取方式打开文件,文件原有的内容全部被删除。

QIODevice::Text:以文本方式打开文件,读取时“\n”被自动翻译为换行符,写入时字符串结束符会自动翻译为系统平台的编码,如 Windows 平台下是“\r\n”。

这些取值可以组合,例如 QIODevice::ReadOnly | QIODevice::Text 表示以只读和文本方式打开文件。

QTextStream 实现流读写

直接使用流写入,可以使用<< 运算符,方便的写入文本。

#include <QCoreApplication>
#include <iostream>
#include <QFile>
#include <QString>
#include <QTextStream>
#include <QTextCodec>

// 计算文件行数
qint32 get_file_count(const QString &file_path)
{
    QFile ptr(file_path);
    qint32 count = 0;

    if(ptr.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        QTextStream in(&ptr);

        // 自动检测unicode编码,显示中文
        in.setAutoDetectUnicode(true);

        while(!in.atEnd())
        {
            QString line = in.readLine();
            std::cout << line.toStdString() << std::endl;
            count = count +1;
        }

        return count;
    }
    return 0;
}

// 追加写入数据
bool write_file_stream(const QString &file_path, QString save)
{
    QFile ptr(file_path);

    if(ptr.open(QIODevice::Append | QIODevice::Text))
    {
        QTextStream in(&ptr);
        in << save;
    }
    ptr.close();
    return true;
}

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

    // 设置编码
    QTextCodec *codec = QTextCodec::codecForName("utf-8");
    QTextCodec::setCodecForLocale(codec);

    // 流写入
    write_file_stream("d://test.txt","hello lyshark");
    write_file_stream("d://test.txt","你好,世界");

    // 取文本长度
    qint32 count = get_file_count("d://test.txt");
    std::cout << "line = > " << count << std::endl;
    return a.exec();
}

到此这篇关于C/C++ Qt 基本文件读写的基本使用(2种实现)的文章就介绍到这了,更多相关Qt 文件读写内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 对比C语言中getc()函数和ungetc()函数的使用

    对比C语言中getc()函数和ungetc()函数的使用

    这篇文章主要介绍了对比C语言中getc()函数和ungetc()函数的使用,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-08-08
  • C语言指针引用数组案例讲解

    C语言指针引用数组案例讲解

    这篇文章主要介绍了C语言指针引用数组案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • C语言循环队列的表示与实现实例详解

    C语言循环队列的表示与实现实例详解

    这篇文章主要介绍了C语言循环队列的表示与实现,对于数据结构与算法的研究很有帮助,需要的朋友可以参考下
    2014-07-07
  • C++内存对齐的实现

    C++内存对齐的实现

    本文主要介绍了C++内存对齐的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 更优雅的C++字符串格式化实现方法详解

    更优雅的C++字符串格式化实现方法详解

    在用C++编写代码时,经常需要用到字符串拼接及格式化,尤其是在拼写sql语句时。所以本文为大家介绍了更优雅的C++字符串格式化实现方法,希望对大家有所帮助
    2023-04-04
  • 深入理解C/C++中的写时拷贝

    深入理解C/C++中的写时拷贝

    这篇文章主要给大家介绍了C/C++中写时拷贝的相关资料,所谓写时拷贝也就是拖延版的深拷贝,下面文章中介绍的非常清楚,需要的朋友可以参考学习,下面来一起看看吧。
    2017-03-03
  • 浅谈C++流库的基本结构

    浅谈C++流库的基本结构

    本文主要介绍了浅谈C++流库的基本结构,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • C++实现五子棋游戏(注释版)

    C++实现五子棋游戏(注释版)

    这篇文章主要为大家详细介绍了C++实现五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • C++Primer笔记之关联容器的使用详解

    C++Primer笔记之关联容器的使用详解

    本篇文章对C++Primer 关联容器的使用进行了详细的分析介绍。需要的朋友参考下
    2013-05-05
  • C++语言 STL容器list总结

    C++语言 STL容器list总结

    这篇文章主要介绍了C++语言 STL容器list总结的相关资料,需要的朋友可以参考下
    2016-10-10

最新评论