关于Qt的文件读写

Qt文件读写

在Qt中进行文件读写通常使用QFile和QTextStream类。
首先你需要在项目中添加以下头文件:

#include <QFile>
#include <QTextStream>

QFile

QFile是Qt中用于读写文件的一个类,提供了丰富的函数接口来进行文件操作。下面是QFile的主要函数原型以及它们的返回值:

// 打开和关闭文件
bool open(OpenMode flags); // 打开文件,flags表示打开模式
void close(); // 关闭文件

// 读写文件
qint64 read(char *data, qint64 len); // 读取文件内容到data缓存区,最多读取len个字节,返回实际读取的字节数
qint64 write(const char *data, qint64 len);//将data缓存区中的内容写入文件,最多写入len个字节,返回实际写入的字节数

// 文件指针
qint64 pos() const; // 返回当前文件读写位置
bool seek(qint64 pos); // 设置文件读写位置,文件指针置于pos位置,返回是否设置成功
bool atEnd() const; // 判断是否到达文件末尾

// 文件信息
QString fileName() const; // 返回文件名字
qint64 size() const; // 返回文件大小

// 错误处理和状态判断
bool isReadable() const; // 判断文件是否可读
bool isWritable() const; // 判断文件是否可写
bool isOpen() const; // 判断文件是否已经打开
bool isError() const; // 判断文件读写过程中是否出错
QFileDevice::FileError error() const; // 判断文件读写过程中的错误类型

QTextStream

QTextStream是Qt中一个方便的文本读写类,用于对文本内容进行读写操作。它支持各种文本编码格式,并且自动处理了换行符等特殊字符。下面是QTextStream中一些常用的函数原型,以及它们的返回值:

// 构造函数和析构函数
QTextStream(); // 默认构造函数
QTextStream(QIODevice *device); // 使用I/O设备device构造QTextStream对象
~QTextStream(); // 析构函数

// 读写操作
QTextStream &operator<<(bool value); // 写入bool类型数据
QTextStream &operator<<(char value); // 写入char类型数据
QTextStream &operator<<(short value); // 写入short类型数据
QTextStream &operator<<(ushort value); // 写入ushort类型数据
QTextStream &operator<<(int value); // 写入int类型数据
QTextStream &operator<<(uint value); // 写入uint类型数据
QTextStream &operator<<(long value); // 写入long类型数据
QTextStream &operator<<(ulong value); // 写入ulong类型数据
QTextStream &operator<<(qint64 value); // 写入qint64类型数据
QTextStream &operator<<(quint64 value); // 写入quint64类型数据
QTextStream &operator<<(float value); // 写入float类型数据
QTextStream &operator<<(double value); // 写入double类型数据
QTextStream &operator<<(const char *value); // 写入C字符串数据
QTextStream &operator<<(const QString &value); // 写入QString数据
QTextStream &operator>>(bool &value); // 读取bool类型数据
QTextStream &operator>>(char &value); // 读取char类型数据
QTextStream &operator>>(short &value); // 读取short类型数据
QTextStream &operator>>(ushort &value); // 读取ushort类型数据
QTextStream &operator>>(int &value); // 读取int类型数据
QTextStream &operator>>(uint &value); // 读取uint类型数据
QTextStream &operator>>(long &value); // 读取long类型数据
QTextStream &operator>>(ulong &value); // 读取ulong类型数据
QTextStream &operator>>(qint64 &value); // 读取qint64类型数据
QTextStream &operator>>(quint64 &value); // 读取quint64类型数据
QTextStream &operator>>(float &value); // 读取float类型数据
QTextStream &operator>>(double &value); // 读取double类型数据
QTextStream &operator>>(QString &value); // 读取字符串数据
QString readLine(); // 读取一行字符串

// 错误处理和状态判断
bool atEnd() const; // 判断是否到达文本末尾
bool ok() const; // 判断读写操作是否成功

示例

下面是一个示例代码,写入一个字符串到文件中;

QFile file("example.txt"); // 将example.txt文件与file对象关联
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
    
     // 指定文件的打开模式
    QTextStream outStream(&file); // 用QTextStream对象向文件中写入数据
    QString str("Hello, World!"); // 要写入的字符串
    outStream << str << endl; // 写入字符串,并添加一个换行符
    file.close(); // 关闭文件
}

下面是一个从文件中读取内容的示例,假设example.txt文件中有文本内容:

QFile file("example.txt"); // 将example.txt文件与file对象关联
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
    
     // 指定文件的打开模式
    QTextStream inStream(&file); // 用QTextStream对象从文件中读取数据
    QString str = inStream.readAll(); // 读取所有的字符串内容
    file.close(); // 关闭文件
    qDebug() << "Content of the file is: " << str; // 在Debug控制台输出读取到的内容
}

QFile实现文件的读写

QFile是Qt中用来读写文件的类,它的定义位于QFile模块中,同时还有一些其他用于文件读写的类和函数。
为了使用QFile类,需要在代码中添加头文件QFile。下面是一个QFile读写文件的示例:

#include <QFile>
#include <QDebug>

void writeToFile()
{
    
    
    // 1.创建QFile实例,并打开文件
    QFile file("example.txt");
    if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
    
     // 只写模式打开文件
        // 2.使用QTextStream写入数据
        QTextStream out(&file);
        out << "Hello, QFile! Write some characters." << endl;

        // 3.关闭文件
        file.close();       
    }
}

void readFromFile()
{
    
    
    // 1.创建QFile实例,并打开文件
    QFile file("example.txt");
    if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
    
     // 只读模式打开文件
        // 2.使用QTextStream读取数据
        QTextStream in(&file);
        QString line = in.readLine();

        // 3.循环读取数据
        while (!line.isNull()) {
    
    
            // 4.输出到控制台
            qDebug() << line;
            // 5.获取下一行数据
            line = in.readLine();
        }

        // 6.关闭文件
        file.close();       
    }
}

以上代码包括如下步骤:
1.使用QFile打开文件,使用QIODevice::ReadOnly或QIODevice::WriteOnly定义打开模式。
2.使用QTextStream写入/读取文件数据。
3.关闭文件。

在这个例子中,为了演示QFile的读写操作,我们首先使用QFile创建了一个example.txt文件并写入了一行字符,然后又使用QFile读取了这个文件的内容并输出到控制台。

需要注意的是,QFile的操作可能会抛出异常和错误,因此在代码中必须处理异常和错误。在这个示例中,我们使用了QIODevice::ReadOnly和QIODevice::WriteOnly两种打开模式,用于指定只读或只写文件。

QFile中关于QIODevice的宏定义

QFile是一个通用的文件读写类,它继承自QIODevice,QIODevice是一个用于读写I/O设备的抽象类,提供了许多文件读写的方法。QFile使用QIODevice提供的方法实现文件的读写,QIODevice中定义了一些与文件读写相关的宏定义,下面分别介绍一下这些宏定义的作用:

  • QIODevice::ReadOnly:只读模式,打开文件时使用,只能进行读操作。
  • QIODevice::WriteOnly:只写模式,打开文件时使用,只能进行写操作。
  • QIODevice::ReadWrite:可读写模式,打开文件时使用,既可以进行读操作,也可以进行写操作。
  • QIODevice::Append:追加模式,打开文件时使用,如果文件已存在,则在文件末尾追加内容。
  • QIODevice::Truncate:截断模式,打开文件时使用,如果文件已存在,将清空文件的内容。
  • QIODevice::Text:文本模式,打开文件时使用,使用文本流进行读写,自动进行换行符的转换,例如在Windows系统中使用"\r\n"表示换行,而在Unix/Linux系统中使用"\n"表示换行。
  • QIODevice::Unbuffered:无缓冲模式,使用QFile操作文件默认开启缓冲,使用该宏定义则禁用缓冲。

这些宏定义都是QIODevice中的枚举值,可以根据需要使用它们来指定QFile对象的打开模式。例如,如果你想以只读方式打开文件,则可以使用以下语句创建QFile对象:

QFile file("example.txt");
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
    
    
    // 文件已打开并可供读操作
    // ...
}

猜你喜欢

转载自blog.csdn.net/m0_58235748/article/details/131299964