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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QFile::copy  (Прочитано 4078 раз)
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 поведение одинаковые.
Записан
Rcus
Гость
« Ответ #1 : Март 20, 2009, 21:37 »

Ну и правильно Улыбающийся если FileEngine не реализует операцию копирования, то Qt создает временный файл и копирует в него содержимое исходного файла блоками. И если все нормально то снимает временный флаг.
Записан
crackedmind
Гость
« Ответ #2 : Март 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
« Последнее редактирование: Март 20, 2009, 21:46 от crackedmind » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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