复制文件功能的QT错误

时间:2014-07-15 05:34:20

标签: c++ qt

我编写了一个QT代码,用于将整个内容从sourcefile复制到destfile。对于小尺寸文件,它运行成功,但对于大尺寸文件(例如,大小为700MB的视频),在复制过程之后,destfile只有2Kb的大小。

这是复制例程的代码,它执行复制过程:

void Copy(QString destfile, QString sourcefile)
{
    qint64 bufSize = 100*1024*1024;//100 MB
    char *buf = new char [bufSize];
    //qint64 dataSize;
    QFile sfile(sourcefile), dfile(destfile);
    if (!sfile.open(QIODevice::ReadOnly) || !dfile.open(QIODevice::WriteOnly))
    {
        qDebug() << "Error";
        return;
    }
    while (!sfile.atEnd())
    {
        sfile.read(buf, bufSize);
        dfile.write(buf);
    }
    sfile.close();
    dfile.close();
    qDebug() << "OK";
}

1 个答案:

答案 0 :(得分:0)

dfile.write(buf);会将a null terminated string写入您的文件,而不是整个数组。你想做的事:

dfile.write(buf, bufSize);
                  ^^^^

备注:

  • 您可能希望检查此调用的返回值以测试实际写入的字节数。与sfile.read(buf, bufSize);相同,测试读取的字节数(可能小于bufSize)。

类似的东西:

while (!sfile.atEnd())
{
    qint64 bytesRead = sfile.read(buf, bufSize);
    if(dfile.write(buf, bytesRead) < 0)
    // error ...
}
  • 此外,可以在堆栈上分配buf,此处不需要new