Russian Qt Forum

Qt => Общие вопросы => Тема начата: Evgeny108 от Июль 12, 2006, 16:30



Название: Как скопировать файл или папку в Qt?
Отправлено: Evgeny108 от Июль 12, 2006, 16:30
Как скопировать файл или целую папку с файлами в Qt?


Название: Как скопировать файл или папку в Qt?
Отправлено: L.Marvell от Июль 12, 2006, 18:16
Быть может QFile::copy()? Создание диры QDir::mkdir()


Название: Как скопировать файл или папку в Qt?
Отправлено: Evgeny108 от Июль 13, 2006, 08:31
Использую Qt 3.3.4, там нет QFile::copy...


Название: Как скопировать файл или папку в Qt?
Отправлено: L.Marvell от Июль 13, 2006, 12:06
Тогда извини, 3 не знаю.


Название: Как скопировать файл или папку в Qt?
Отправлено: DenKor от Июль 13, 2006, 13:08
Тогда функциями winapi CopyFile или пиши свою процедуру копирования для двух файлов (открытие двух файлов, чтение блока,запись блока,закрытие файла).

Второе более кросплатформенное.

bool
QFile::copy(const QString &newName)
{
    Q_D(QFile);
    if (d->fileName.isEmpty()) {
        qWarning("QFile::copy: Empty or null file name");
        return false;
    }
    close();
    if(error() == QFile::NoError) {
        if(fileEngine()->copy(newName)) {
            unsetError();
            return true;
        } else {
            bool error = false;
            if(!open(QFile::ReadOnly)) {
                error = true;
                QString errorMessage = QLatin1String("Cannot open %1 for input");
                d->setError(QFile::CopyError, errorMessage.arg(d->fileName));
            } else {
                QTemporaryFile out;
                if(!out.open()) {
                    close();
                    error = true;
                    d->setError(QFile::CopyError, QLatin1String("Cannot open for output"));
                } else {
                    char block[1024];
                    while(!atEnd()) {
                        qint64 in = read(block, 1024);
                        if(in == -1)
                            break;
                        if(in != out.write(block, in)) {
                            d->setError(QFile::CopyError, QLatin1String("Failure to write block"));
                            error = true;
                            break;
                        }
                    }
                    if(!error && !out.rename(newName)) {
                        error = true;
                        QString errorMessage = QLatin1String("Cannot create %1 for output");
                        d->setError(QFile::CopyError, errorMessage.arg(newName));
                    }
                }
            }
            if(!error) {
                QFile::setPermissions(newName, permissions());
                unsetError();
                return true;
            }
        }
    }
    return false;
}

/*!
    \overload

    Copies the file \a fileName to \a newName. Returns true if successful;
    otherwise returns false.

    If a file with the name \a newName already exists, copy() returns false
    (i.e., QFile will not overwrite it).

    \sa rename()
*/

bool
QFile::copy(const QString &fileName, const QString &newName)
{
    return QFile(fileName).copy(newName);
}


Название: Как скопировать файл или папку в Qt?
Отправлено: Negative от Июль 13, 2006, 15:22
http://lists.trolltech.com/qt-interest/2003-10/msg01051.html