欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Qt5--文件操作(4)读写mp3文件

程序员文章站 2024-03-22 21:04:46
...

目标

 把一个20秒的mp3文件以256字节一次的方式读出来,然后再以256字节一次的方式写到一个新的空白文件中去。

QFile file("D:\\Output\\Qt5.11.2\\File\\untitled\\Alan Walker.mp3");
if (!file.open(QIODevice::ReadOnly | QIODevice::text))
   {
       qDebug() << "Open file failed.";
       return -1;
   }

 使用上面这种文件打开方式,新文件比老文件少了几个字节,而且新文件无法播放!通过对比发现,新文件随机性的减少了“0x00”。
 使用以下这种方式打开文件,写入的新文件可以播放,目的达到。

QFile file("D:\\Output\\Qt5.11.2\\File\\untitled\\Alan Walker.mp3");
if (!file.open(QIODevice::ReadOnly | QIODevice::Unbuffered))
   {
       qDebug() << "Open file failed.";
       return -1;
   }

 完整代码。

#include "mainwindow.h"
#include <QApplication>
#include <QFile>
#include <QFileInfo>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    char mp3file[256] = {0};
    qint64 sum = 0;

    QFile file("D:\\Output\\Qt5.11.2\\File\\untitled\\Alan Walker.mp3");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Unbuffered))
    {
        qDebug() << "Open file failed.";
        return -1;
    } else {

        QFile file2("D:\\Output\\Qt5.11.2\\File\\untitled\\Alan.mp3");
        if (!file2.open(QIODevice::WriteOnly))
        {
            qDebug() << "Open file failed.";
            return -1;
        } else {
            while (!file.atEnd())
            {
                sum++;
                file.read(mp3file, 256);
                file2.write(mp3file, 256);
//                qDebug() << mp3file;
            }
        }
        qDebug() << sum;
        file.close();
        file2.close();
    }
    return a.exec();
}