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

目录
  • QT基本文件读写
  • 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 文件读写内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Qt基础开发之Qt文件操作类QFile读写文件的详细方法与实例及QDataStream的使用方法

    Qt文件操作类QFile简介 Qt中使用QFile类来操作文件的输入/输出.继承至QIODevice,QIODevice类是输入/输出设备的基类, 为设备提供了公共实现和抽象接口用于读写块数据.QIODevice又继承至QObject. 1.使用QFile类打开文件 QFile的构造函数 QFile(const QString &name) //传入一个文件路径 构造完成后,并没有打开文件,需要使用QFile::open函数来打开文件 [virtual] bool QFile::open(Ope

  • PyQt5结合QtDesigner实现文本框读写操作

    本文主要介绍了PyQt5结合QtDesigner实现文本框读写操作,分享给大家,具体如下: 主要内容: 1.读.写 输入控件(Input Widgets)中的内容(str) 2.保存数据到txt文件 3.从txt文件中读内容,与输入控件中内容比较 将上述各种输入控件(Input Widgets)中的内容保存到txt文件中: Ui文件 # -*- coding: utf-8 -*- from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog

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

    目录 QT基本文件读写 QTextStream 实现流读写 文件的读写是很多应用程序具有的功能,甚至某些应用程序就是围绕着某一种格式文件的处 理而开发的,所以文件读写是应用程序开发的一个基本功能. Qt文件操作有两种方式,第一种使用QFile类的IODevice读写功能直接读写,第二种是利用 QFile和QTextStream结合起来,用流的方式进行文件读写. 第一种,利用QFile中的相关函数,实现对文件的读写操作,QFile会调用IODevice设备,从而实现文件读写. QT基本文件读写 通

  • QT中如何读写ini配置文件

    如图1所示,我们需要在QT界面中实现手动读取参数存放的位置,那么我们该如何做呢? 方法:读取ini格式的配置文件,实现路径的写入与读取. 第一步:界面构造函数中,初始化一个Config.ini文件 //初始化一个.ini配置文件 //qApp是QT系统自带的,可以直接使用 QString iniFilePath=qApp->applicationDirPath()+"/Config.ini"; //如果不存在Config.ini,便生成一个Config.ini.如果已经存在了,则

  • Qt QFile文件操作的具体使用

    目录 QFile文件操作 QFile+QTextStream QFile+QDataStream 很多应用程序都需要具备操作文件的能力,包括对文件内容进行读/写.创建和删除文件等,甚至某些应用程序的诞生纯粹是为了操作文件,比如 WPS Office.PDFedit 等.为此,Qt 框架提供了 QFile 类专门用来操作文件. QFile文件操作 QFile 类支持对文件进行读取.写入.删除.重命名.拷贝等操作,它既可以操作文件文件,也可以操作二进制文件. 使用 QFile 类操作文件之前,程序中

  • python文件读写操作与linux shell变量命令交互执行的方法

    本文实例讲述了python文件读写操作与linux shell变量命令交互执行的方法.分享给大家供大家参考.具体如下: python对文件的读写还是挺方便的,与linux shell的交互变量需要转换一下才能用,这比较头疼. 代码如下: 复制代码 代码如下: #coding=utf-8 #!/usr/bin/python import os import time #python执行linux命令 os.system(':>./aa.py') #人机交互输入 S = raw_input("

  • 关于SQL注入中文件读写的方法总结

    前言 SQL注入有直接sql注入也有文件读写时的注入了我们这篇文章介绍的是SQL注入中的文件读写这一块的内容,具体的一起来看看. 一.MySQL 读文件 常见的读文件,可以用16进制代替字符串 select load_file('c:/boot.ini') select load_file(0x633a2f626f6f742e696e69) select load_file('//ecma.io/1.txt') # smb协议 select load_file('\\\\ecma.io\\1.t

  • 全面了解java byte数组与文件读写

    全面了解java byte数组与文件读写 import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class FileHelper { <span style="white-space:pre"> </span

  • Java IO 之文件读写简单实例

    Java IO 之文件读写简单实例 1.文件读 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. */ public static void readFileByBytes(String fileName) { File file = new File(fileName); InputStream in = null; try { System.out.println("以字节为单位读取文件内容,一次读一个字

  • IOS 文件读写操作详解及简单实例

    iPhone 文件读写操作 1,写文件操作 - (IBAction)btnWrite:(id)sender { //创建文件管理器 NSFileManager *fileManager = [NSFileManager defaultManager]; //获取路径 //参数 要获取的哪种路径 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSSt

  • asp.net INI文件读写类

    复制代码 代码如下: using System; using System.Runtime.InteropServices; using System.Text; using System.IO; namespace Common { /// <summary> /// INI文件读写类. /// </summary>     public class INIFile     {         public string path; public INIFile(string I

  • Python中使用asyncio 封装文件读写

    前言 和网络 IO 一样,文件读写同样是一个费事的操作. 默认情况下,Python 使用的是系统的阻塞读写.这意味着在 asyncio 中如果调用了 f = file('xx') f.read() 会阻塞事件循环. 本篇简述如何用 asyncio.Future 对象来封装文件的异步读写. 代码在 GitHub.目前仅支持 Linux. 阻塞和非阻塞 首先需要将文件的读写改为非阻塞的形式.在非阻塞情况下,每次调用 read 都会立即返回,如果返回值为空,则意味着文件操作还未完成,反之则是读取的文件

随机推荐