Russian Qt Forum

Qt => Общие вопросы => Тема начата: crackedmind от Март 20, 2009, 21:21



Название: QFile::copy
Отправлено: crackedmind от Март 20, 2009, 21:21
Наследовался я значит от QAbstractFileEngine, реализовал нужный мне функционал.

Только вот функцию эту не стал реализовывать.
Код:
bool myFileEngine::copy(const QString &)
{
    return false;
}

Затем вызываю
Код:
QFile("my:/data/file.txt", "file.txt");
Вызывается стандартная функция.
Файл замечательно копируется, но! Остается временный файл. Заглянув в qfile.cpp:892 видим следующее
Код:
#ifndef QT_NO_TEMPORARYFILE
                    if (!error) // естественно false т.к. все прошло без ошибок, и срабатывает следующая строчка
                        out.setAutoRemove(false); // как раз указывает на то чтобы отключить удаление временного файла.
#endif

Вопрос, а нахрена??? Бага, фича или что :) Причем, что в 4.5.0, что 4.4.3 поведение одинаковые.


Название: Re: QFile::copy
Отправлено: Rcus от Март 20, 2009, 21:37
Ну и правильно :) если FileEngine не реализует операцию копирования, то Qt создает временный файл и копирует в него содержимое исходного файла блоками. И если все нормально то снимает временный флаг.


Название: Re: QFile::copy
Отправлено: crackedmind от Март 20, 2009, 21:41
Цитировать
Ну и правильно  если FileEngine не реализует операцию копирования, то Qt создает временный файл и копирует в него содержимое исходного файла блоками.
Это кристально понятно. Не понятно почему временной файл не удаляется. Т.е. вопрос в целесообразности
Код:
#ifndef QT_NO_TEMPORARYFILE
                    if (!error) // естественно false т.к. все прошло без ошибок, и срабатывает следующая строчка
                        out.setAutoRemove(false); // как раз указывает на то чтобы отключить удаление временного файла.
#endif
куска кода.
После того как я его закоментировал и пересобрал QtCore, то все нормально копируется и временной файл удаляется.
Я один чтоли думаю, что здесь не правильная логика поведения?

Вот такое поведение было бы логичнее
Код:
#ifndef QT_NO_TEMPORARYFILE
                    if (error)
                        out.setAutoRemove(false);
#endif