我编写了一个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";
}
答案 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
。