コード例 #1
0
ファイル: downloader.cpp プロジェクト: KDE/bangarang
void Downloader::download(const QUrl &from, const QUrl &to)
{
    if (to.isLocalFile()) {
        QFile fileTarget(to.path());
        fileTarget.remove();
    }
    KIO::CopyJob *copyJob = KIO::copyAs(from, to, KIO::Overwrite | KIO::HideProgressInfo);
    copyJob->setUiDelegate(0);
    copyJob->setAutoDelete(true);
    connect (copyJob, 
             SIGNAL(copyingDone(KIO::Job*,QUrl,QUrl,time_t,bool,bool)),
             this,
             SLOT(copyingDone(KIO::Job*,QUrl,QUrl,time_t,bool,bool)));
}
コード例 #2
0
bool FileSystemManager::copyFile(QString source, QString target, qint64 totalSize, bool cut)
{
    QFile fileSource(source);
    QFile fileTarget(target);

    fileSource.open(QFile::ReadOnly);
    fileTarget.open(QFile::WriteOnly);

    char block[BLOCK_SIZE];
    qint64 total = fileSource.size();
    qint64 steps = total >> 7;        //shift right 7, same as divide 128, much faster
    qint64 bytesCopied = 0;

    while(!fileSource.atEnd())
    {
        if(m_cancel)
            break;

        qint64 inBytes = fileSource.read(block, sizeof(block));
        fileTarget.write(block, inBytes);
        bytesCopied += inBytes;

        if(bytesCopied > steps)
        {
            emit updateCopyProgress(target, bytesCopied, totalSize);
            bytesCopied = 0;
        }
    }

    emit updateCopyProgress(target, bytesCopied, totalSize);

    fileTarget.close();
    fileSource.close();

    if(fileTarget.size() != total)
        return false;

    if(cut)
        fileSource.remove();  //if file is cut remove the source

    return true;
}