Qt文件编程QFile编程

 目录

文件类QFile编程

        1、构造函数

        2、设置文件名

        3、打开文件  

        4、关闭文件

        5、读取文本文件

        函数(1):(read函数)        

        函数(2):(readLine函数)

        6、从文件中读取二进制数据

        7、向文本文件中写文件

        示例代码

        示例效果

        8、写入二进制文件

        示例代码

        9、判断文件是否存在

        10、获取文件名

        11、返回文件大小

        12、删除文件

        13、重命名文件

        14、复制文件


文件类QFile编程

        1、构造函数

        QFile的构造函数通常有两种:

        QFile() //构造一个没有名字的QFile对象,通常配合setFileName一起使用

        QFile(const QString &name) //构造一个以name为文件名的QFile对象

        示例:        QFile fd;     fd.setFilename();

                     等价于:QFile fd()

        该操作仅仅关联到文件,此时还无法对文件进行读写。setFileName()可以为QFile对象设置操作的某个文件的文件名,文件名可以不带路径,也可以带相对路径或者绝对路径。如果文件名不带路径,则默认当前程序的当前路径。

        2、设置文件名

void QFile::setFileName(const QString &name)   //name:文件名,QT支持的文件路径分隔符为'/'。

设置文件名之后就可以打开文件进行读写操作了。

        3、打开文件  

        函数:

                bool QFile::open(QIODevice::OpenMode mode)    //成功返回true, 失败返回false

       //mode:打开文件的模式

        mode如下:

                QIODevice::ReadOnly:以只读模式打开文件

                QIODevice::WriteOnly:以只写模式打开文件

                QIODevice::ReadWrite:以可读可写模式打开文件

                QIODevice::Text:以文本模式打开文件

                QIODevice::Append:以追加模式打开文件,所有数据写入文件末尾,此模式下不可进行文件的读操作

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

这些模式可单独设置,也可选择合适模式组合使用,示例如下:

QIODevice::WriteOnly | QIODevice::Text

//以只写方式和文本方式打开文件。

        4、关闭文件

        函数:

                void QFileDevice::close()    //文件不再使用之后调用close()函数将文件操作关闭。

close()函数是QFile父类QFileDevice的成员函数。

        5、读取文本文件

QFile类本身并没有提供从文件中读取数据的函数,而是利用了其祖先类QIODevice的成员读函数read()和readLine()。

        函数(1):(read函数)        

                qint64 QIODevice::read(char*data, qint64 maxSize);

                //data指向缓冲区,读取到的数据将放在缓冲区中;

                //maxSize表示最多要读取的数据量(字节数)。如果成功读取到数据,则返回读取到的数据的字节数:如果发生错误,比如试图从以(WriteOnly)只写方式打开的设备读取数据时,此函数返回-1。如果没有可读取的数据,则此函数返回0。

示例代码:(读取全部文件内容)

  //文件操作,打开当前程序路径下的某个txt文件并全部显示到控件textEdit中
    QString path = QCoreApplication::applicationDirPath();//获取当前程序路径
    qDebug()<<path;
    QFile file(path+"/控制.txt");//设置文件为当前路径下的控制.txt
    if(file.open(QFile::ReadOnly))//只读方式打开文件控制.txt
    {
        QTextStream in(&file);
        //读取文件内容并追加到textedit控件中
        while (!in.atEnd())//如果未到文本末尾则一直读取并追加显示
        {
            QString line = in.readLine();
            ui->textEdit->append(line);
        }
        file.close();
    }

        函数(2):(readLine函数)

                qint64 readLine(char*data, qint64 maxSize);

                //data指向缓存区,存放读取到的行数据;

                //maxSize表示最多要读取的字节数

                //返回值:成功返回读取到的字节数; 没出错但是没读取到数据返回0; 发生错误返回-1

        //字符串的终止字符‘\0’总是附加到读取数据的行末,因此,maxSize必须大于1.

        这个函数的读取结束情况如下:

                1、第一次读取到‘\n’

                2、读取的数据量达到了maxSize-1

                3、检测到设备(文件)的结束字符

示例代码:(从文件中读取一行字符):

  //文件操作
    QFile file("控制.txt");
    if(file.open(QFile::ReadOnly))//只读方式打开文件控制.txt
    {
        char buff[1024];//定义缓冲区数组
        int len = file.readLine(buff, sizeof(buff));
        if(len != -1)
        {
            qDebug()<<buff;
            ui->textEdit->setText(buff);
        }
        else
            qDebug()<<"文件打开失败:"<<len;
    }

               

        6、从文件中读取二进制数据

QFile类本身并没有提供从文件中读取数据的函数,而是利用了其祖先类QIODevice的成员读函数read()。

        函数:

                QByteArray read(qint64 maxSize);

        该函数最多读取maxSize个字节的数据,内部位置指针后移maxSize,并返回一个QByteArray对象。该函数用于读取二进制文件。

        另外,QIODevice::readAll()函数会从设备(比如磁盘文件)中读取所有数据,并返回QByteArray对象,即一个字节数组。

        函数:

                QByteArray readAll();

        该函数返回QByteArray对象,通常用于读取二进制文件。

 QString path = QCoreApplication::applicationDirPath();//获取当前程序路径
    qDebug()<<path;
    QFile file(path+"/控制1.txt");//设置文件为当前路径下的控制.txt
    QByteArray data;
    if(file.open(QFile::ReadOnly))//文件打开成功
    {
        data = file.readAll();//读取全部文件
        file.close();//关闭文件
    }

        7、写入文本文件

        QFile类本身并没有提供从文件中读取数据的函数,而是利用了其祖先类QIODevice的成员函数write()。

        (1)、最多写maxSize个字符到文件中

        qint64 write(const char* data, qint64 maxSize);

        data:要写入的数据

        maxSize:表示最多能写入的字符数

        返回值:如果函数写入成功,返回实际写入的字节数;如果发生错误,就返回-1.

        (2)、直接写入数据

        qint64 write(const char*data);

        示例代码

   QString path = QCoreApplication::applicationDirPath();//获取当前程序路径
    qDebug()<<path;
    QFile file(path+"/控制.txt");//设置文件为当前路径下的控制.txt
    //内容写入
    if(file.open(QIODevice::WriteOnly | QIODevice::Append))//只写方式打开文件控制.txt
    {
        //写入文本内容
        file.write("大家好呀,我们一起加油!\n");
        file.close();
    }
    //内容查看
    if(file.open(QIODevice::ReadOnly))//只读方式打开文件控制.txt
    {
        //显示文件查看写入成功与否
        QTextStream in(&file);
        //读取文件内容并追加到textedit控件中
        while (!in.atEnd())//如果未到文本末尾则一直读取并追加显示
        {
            QString line = in.readLine();
            ui->textEdit->append(line);
        }
        file.close();
    }

        示例效果

        8、写入二进制文件

          QFile类本身并没有提供从文件中读取数据的函数,而是利用了其祖先类QIODevice的成员函数write()。

        函数:

               qint64 write(const QByteArray &byteArray);

        byteArray表示要写入的数据,写入成功返回写入的字节数,否则返回-1.

        示例代码

    QString path = QCoreApplication::applicationDirPath();//获取当前程序路径
    qDebug()<<path;
    QFile file(path+"/控制.txt");//设置文件为当前路径下的控制.txt
    //内容写入
    QByteArray data;
    data.resize(6);
    data[0] = 0x2c;
    data[1] = 0x3e;
    data[2] = 0x4b;
    data[3] = 0x5c;
    data[4] = 0x6a;
    data[5] = 0x7f;
    if(file.open(QIODevice::WriteOnly | QIODevice::Append))//只写方式打开文件控制.txt
    {
        //写入文本内容
        file.write(data);
        file.write("\n");
        file.close();
    }
    //内容查看
    if(file.open(QIODevice::ReadOnly))//只读方式打开文件控制.txt
    {
        //显示文件查看写入成功与否
        QTextStream in(&file);
        //读取文件内容并追加到textedit控件中
        while (!in.atEnd())//如果未到文本末尾则一直读取并追加显示
        {
            QString line = in.readLine();
            ui->textEdit->append(line);
        }
        file.close();
    }

由于写入文本文件之中时16进制数据会转换为对应的ASCII字符,所以此处显示为",k\j"。

        9、判断文件是否存在

判断文件是否存在是常用的文件操作。QFile类的成员函数exists()可以用来判断文件是否存在。

        函数:         bool exists();

文件存在返回true,文件不存在返回false。

    QString path = QCoreApplication::applicationDirPath();//获取当前程序路径
    qDebug()<<path;
    QFile file(path+"/控制.txt");//设置文件为当前路径下的控制.txt
    if(file.exists())
        ui->textEdit->setText("该文件存在");
    else
        ui->textEdit->setText("该文件不存在");

        10、获取文件名

        QFile类的成员函数fileName()可以用来获取文件。

        QString fileName();        函数返回QString类型的文件名。

        11、返回文件大小

        QFile类的成员函数size()可以用来获取文件大小。

        函数:

                        qint64 size();

        因为该函数的返回值是qint64(64位数据类型),故而可以返回大文件的大小。

        对于打开的随机访问设备,此函数返回设备的大小;如果打开的顺序访问设备,将返回byteAvailable();如果设备关闭了,那么返回的大小将不反映设备的实际大小。

        12、删除文件

        QFile类的静态成员函数remove()可以用来删除文件。

        函数:

                bool QFile::remove(const QString &fileName);

        fileName表示要删除文件的文件名。

        同时,QFile类也提供了非静态成员函数版本的remove(),使用的前提是QFile对象已经关联到某个文件。

        bool remove(const QString &fileName);

        fileName表示要删除的文件名,如果删除成功返回true,失败返回false。

    QString path = QCoreApplication::applicationDirPath();//获取当前程序路径
    qDebug()<<path;
    QFile file(path+"/控制1.txt");//设置文件为当前路径下的控制.txt
    if(file.exists())
        ui->textEdit->setText("该文件存在\n");
    else
        ui->textEdit->setText("该文件不存在\n");
    //删除该文件
    file.remove();
    if(file.exists())
        ui->textEdit->append("该文件存在\n");
    else
        ui->textEdit->append("该文件不存在\n");

        13、重命名文件

QFile类的静态成员函数rename()可用来重命名文件。

        函数(1):

                bool QFile::rename(const QString &oldName,const QString &newName);

oldName:表示文件本身的名字;        newName:表示文件需要修改成的名字。        成功返回true,失败返回false。

QFile类提供的非静态成员函数rename(),前提:QFile对象已经关联到文件

        函数(2):

                bool rename(const QString &newName); //newName:表示文件需要修改成的名字。        成功返回true,失败返回false。

    QString path = QCoreApplication::applicationDirPath();//获取当前程序路径
    qDebug()<<path;
    QFile file(path+"/控制.txt");//设置文件为当前路径下的控制.txt
    if(file.exists())
        ui->textEdit->setText("该文件存在\n");
    else
        ui->textEdit->setText("该文件不存在\n");
    if(file.rename(path+"木兰辞.txt"))
    {
        ui->textEdit->append("文件重命名成功\n");
    }
    else
        ui->textEdit->append("文件重命名失败\n");

        14、复制文件

QFile的静态函数copy()可实现复制文件的操作,成功返true,失败返回false。

函数如下:        bool QFile::copy(const QString &fileName, const QString &newName);

        fileName:源文件的文件名;         newName:复制后新文件的文件名。     成功返回true,失败返回false。

QFile的非静态成员函数,前提:QFile对象成功关联到文件。

函数如下:        bool copy(const QString &newName);

//newName:复制后新文件的文件名。     成功返回true,失败返回false。

        (1)、复制、重命名文件(静态函数版)

 QString path = QCoreApplication::applicationDirPath();//获取当前程序路径
    qDebug()<<path;
    QFile file(path+"/木兰辞.txt");//设置文件为当前路径下的控制.txt
    if(file.exists())
        ui->textEdit->setText("该文件存在\n");
    else
        ui->textEdit->setText("该文件不存在\n");

    if(QFile::copy(path+"/木兰辞.txt", path+"/木兰辞复制.txt"))
    {
        ui->textEdit->append("木兰辞复制成功");
    }
    else
        ui->textEdit->append("木兰辞复制失败");

        (2)、复制、重命名文件(非静态函数版)

   QString path = QCoreApplication::applicationDirPath();//获取当前程序路径
    qDebug()<<path;
    QFile file(path+"/木兰辞.txt");//设置文件为当前路径下的控制.txt
    if(file.exists())
        ui->textEdit->setText("该文件存在\n");
    else
        ui->textEdit->setText("该文件不存在\n");

    if(file.copy(path+"/木兰辞复制2.txt"))
    {
        ui->textEdit->append("木兰辞复制成功");
    }
    else
        ui->textEdit->append("木兰辞复制失败");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值