Russian Qt Forum

Qt => Общие вопросы => Тема начата: Gomerd от Ноябрь 20, 2010, 18:19



Название: QFile. Перемещение файла
Отправлено: Gomerd от Ноябрь 20, 2010, 18:19
Доброго времени суток. Может кто поможет, есть код:
Код:
        fileName = QFileDialog::getOpenFileName(this,
            tr("Select Video File"), "", tr("Video Files (*.avi *.wma *.mpeg *.mp4 *.mov)"));
        QFile videoFile(fileName);

По нажатию на кнопку появляется диалоговое окно, где пользователь выбирает видео файл, затем мне нужно переместить выбранный им файл в специально приготовленную папку. Но такого метода я что то не нашел у QFile, может я неверно копаю?

ЗЫ. Заранее спасибо!


Название: Re: QFile. Перемещение файла
Отправлено: alexman от Ноябрь 20, 2010, 18:40
bool QFile::copy ( const QString & fileName, const QString & newName ) [static]


Название: Re: QFile. Перемещение файла
Отправлено: shirushizo от Ноябрь 20, 2010, 18:46
bool QFile::rename ( const QString & newName )


Название: Re: QFile. Перемещение файла
Отправлено: Yuriy от Январь 28, 2012, 11:41
bool QFile::rename ( const QString & newName )


А интересно. Я распаковываю zip с помощью Qt в папку на том же диске, где мне будут нужны файлы. И потом использую QFile::rename. И что в этом случае происходит ??? Qt их все откопирует, а потом сотрет оригиналы или он их перенесет. А если на разных дисках Dest и Src папки. Не совсем понятно. Может быть кто нибудь разъяснит и может имеет тогда смысл распаковывать файлы по одному и сразу же укладывать с нужными именами в назначенный каталог ????


Название: Re: QFile. Перемещение файла
Отправлено: Yuriy от Январь 28, 2012, 12:11
Ответ в исходниках. не знаю как в 4.8, в 4.7.2 явно видно, что сначала идет копирование, а потом затирание исходного файла. Отсюда и фрагментность файлов и лишняя работа на ж.д.

Не знаю насколько медленно извлекать множество файлов из zip по одному, но судя по всему побыстрее чем в rar-ах, в qzip.cpp:

Код:
    int start = readUInt(header.h.offset_local_header);
    //qDebug("uncompressing file %d: local header at %d", i, start);

    d->device->seek(start);

так что по идее это должно работать быстро, раз считывание архивного файла происходит с заданной позиции...