Здравствуйте, гость ( Вход | Регистрация )
|
SABROG |
16.5.2009, 21:38
Сообщение
#1
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34
|
Юзал QTemporaryFile для удаления временных файлов, но если приложение запускают прямо из сети, то временные файлы не удаляются. Точно такая же история и с vim/gvim, его файлики с тильдой "~" остаются на удаленном хосте, чем загаживают папочку с php скриптами на web сервере.
Я так понимаю используются какие-то нативные средства винды для управления временными файлами и Qt сама не удаляет файл, а рассчитывает на то, что это сделает ОС. Никто с этим не сталкивался? |
|
|
|
![]() |
|
kwisp |
19.5.2009, 15:25
Сообщение
#11
|
|
астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23
|
Цитата(Litkevich Yuriy @ 19.5.2009, 16:19) Link Qt необрабатывает события завершения консольного приложения. а могла бы в винде SetConsoleCtrlHandler Есть в линуксе сигналы по исходникам поискал SetConsoleCtrlHandler нигде не используется. все равно даже если бы тролли включили эту обработку то от ситуации когда шнур питания дернули это не спасёт верно же? поэтому считаю выход в темповой дирректории. |
|
|
|
|
Litkevich Yuriy |
19.5.2009, 15:44
Сообщение
#12
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(kwisp @ 19.5.2009, 19:25) Link то от ситуации когда шнур питания дернули это не спасёт верно же? ну это-то понятно - это авария.
|
|
|
|
|
igor_bogomolov |
19.5.2009, 15:56
Сообщение
#13
|
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29
|
Можно еще воспользоваться void qAddPostRoutine ( QtCleanUpFunction ptr ). Если конечно не пугают глобальные функции и переменные.
Раскрывающийся текст Файлы удаляются при любом закрытии консоли |
|
|
|
|
SABROG |
19.5.2009, 15:56
Сообщение
#14
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34
|
Выход в ОС и её администрировании. В той же винде бывает столько файлов накапливается временных, что просто жуть. Правда там программа по очистке диска, которая всплывает при нехватки памяти на диске.
Но все-равно. Имхо в ОС должен быть специальный тип файлов или список подконтрольных временных файлов, которые должны удаляться автоматически, если процесс его создавший не существует и ни одна другая программа этот файл не держит открытым. |
|
|
|
|
kwisp |
19.5.2009, 15:58
Сообщение
#15
|
|
астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23
|
Цитата(kwisp @ 19.5.2009, 15:30) Link а если файлы создавать в темповой папке которая раз в неделю или при перезапуске очищается? ну это уже к вопросу администрирования. тоже вариант. Цитата(SABROG @ 19.5.2009, 16:56) Link Выход в ОС и её администрировании. ну вот. |
|
|
|
|
SABROG |
19.5.2009, 16:02
Сообщение
#16
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34
|
Цитата(SABROG @ 19.5.2009, 16:56) Link Можно еще воспользоваться void qAddPostRoutine ( QtCleanUpFunction ptr ). Если конечно не пугают глобальные функции и переменные. Дело тут даже не в методе qAddPostRoutine, а в том, что QTemporaryFile статический. Попробуй, деструктор вызывается. Мистика какая-то. |
|
|
|
|
Авварон |
19.5.2009, 21:41
Сообщение
#17
|
![]() Студент ![]() Группа: Участник Сообщений: 99 Регистрация: 26.4.2009 Пользователь №: 709 Спасибо сказали: 14 раз(а) Репутация: 0
|
вообще-то в линуксе для того сигналы и нужны, чтобы их перехватывали - нормальная программа ДОЛЖНА отслеживать SIGTERM (ctrl+c) тобы освободить ресурсы. Ясен пень, что если этого не сделать, то деструкторы объектов зваться НЕ будут - ОС всего лишь отчистит память. Хз как с этим в виндовзе, но в линухе переопределить SIGTERM просто необходимо. Другой вопрос, что должна быть какая-то реализация в Qt такого полуэкстренного выхода (эктренный это SIGKILL:)) - нужно смотреть QApplication
|
|
|
|
|
SABROG |
19.5.2009, 22:03
Сообщение
#18
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34
|
А вообще в таких случая ОС кидает исключения какие-нибудь?
|
|
|
|
|
igor_bogomolov |
19.5.2009, 22:23
Сообщение
#19
|
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29
|
Цитата(SABROG @ 19.5.2009, 23:03) Link А вообще в таких случая ОС кидает исключения какие-нибудь? Я пробовал исключения отловить, не вышло. Видимо не кидает, или у меня руки кривые.Еще пробовал Link заюзать. Тоже не подошло. Сейчас вообще задумался над тем, чтобы унаследовать QCoreApplication и переопределить его метод winEventFilter. Для этого пока разбираюсь в libqxt. У них подобным образом сделан отлов событий клавиатуры. Еще читаю Link. Сообщение отредактировал igor_bogomolov - 19.5.2009, 22:25 |
|
|
|
|
SABROG |
19.5.2009, 22:44
Сообщение
#20
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34
|
Ладно, не думаю, что в этом есть какой-то смысл. Даже если отловить момент, от вырубания электричества это не спасет.
Тут нужен комплекс мер и в пределах одного класса QTemporaryFile проблему не решить. А посему думаю, что тут удобнее будет использовать обычный QFile с известным именем и всякие проверки в момент запуска программы на его существование. |
|
|
|
![]() ![]() ![]() |
|
|
Текстовая версия | Сейчас: 19.8.2025, 22:59 |