Russian Qt Forum
Май 04, 2024, 01:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как скопировать файл или папку в Qt?  (Прочитано 11397 раз)
Evgeny108
Гость
« : Июль 12, 2006, 16:30 »

Как скопировать файл или целую папку с файлами в Qt?
Записан
L.Marvell
Гость
« Ответ #1 : Июль 12, 2006, 18:16 »

Быть может QFile::copy()? Создание диры QDir::mkdir()
Записан
Evgeny108
Гость
« Ответ #2 : Июль 13, 2006, 08:31 »

Использую Qt 3.3.4, там нет QFile::copy...
Записан
L.Marvell
Гость
« Ответ #3 : Июль 13, 2006, 12:06 »

Тогда извини, 3 не знаю.
Записан
DenKor
Гость
« Ответ #4 : Июль 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);
}
Записан
Negative
Гость
« Ответ #5 : Июль 13, 2006, 15:22 »

http://lists.trolltech.com/qt-interest/2003-10/msg01051.html
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 20.