Russian Qt Forum
Ноябрь 23, 2024, 18:24
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
Как отслеживать появление новых файлов в папке?
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Как отслеживать появление новых файлов в папке? (Прочитано 13090 раз)
Dimatorus
Гость
Как отслеживать появление новых файлов в папке?
«
:
Октябрь 20, 2011, 15:52 »
Нужно сделать программу, которая будет иметь две папки. В одну будут помещаться файлы (к примеру другой программой), а моя программа должна будет их открыть (причем нужно отследить как то чтобы файл полностью скопировался к тому моменту как моя прога захочет его открыть, что б не было утечек), обработать и затем перенести их в другой каталог. То есть она должна будет работать в фоне. Появился файл - она хоп и подхватила его, обработала и утащила в другую папку и ждет следующего.
Можно ли это сделать средствами Qt. Если нет, то подскажите как это можно сделать. Заранее благодарен.
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Как отслеживать появление новых файлов в папке?
«
Ответ #1 :
Октябрь 20, 2011, 15:55 »
Цитата: Dimatorus от Октябрь 20, 2011, 15:52
Нужно сделать программу, которая будет иметь две папки.
Причем в жесткой извращенной форме.
По теме,
QFileSystemWatcher
.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Dimatorus
Гость
Re: Как отслеживать появление новых файлов в папке?
«
Ответ #2 :
Октябрь 20, 2011, 15:59 »
Судя по документации, от отслеживает только изменение и удаление файла. А мне нужно чтобы объект мониторил появление файла и посылал соответствующий сигнал.
Записан
Dimatorus
Гость
Re: Как отслеживать появление новых файлов в папке?
«
Ответ #3 :
Октябрь 20, 2011, 16:00 »
а блин... там же есть еще directoryChanged... надо попробовать. Спасибо.
Записан
Dimatorus
Гость
Re: Как отслеживать появление новых файлов в папке?
«
Ответ #4 :
Октябрь 20, 2011, 16:03 »
Еще один вопрос. Когда этот сигнал посылается - это уже значит что он скопировался и я могу его открыть? Или может получиться так что будет копироваться большой файл, сигнал вышлется и я начну пытаться открыть еще не докопированный файл?
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Как отслеживать появление новых файлов в папке?
«
Ответ #5 :
Октябрь 20, 2011, 16:07 »
Тут я даже не знаю, как правильнее решить. QFileSystemWatcher тебе просигнализирует при появлении файла. По идее, потом можно в цикле проверять размер файла и если он перестанет изменяться, значит копирование завершено. Но это не вариант, если при копировании файл сразу ресайзится на полный размер. Встроенных средств нет, но можно использовать АПИ конкретной ОС.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Dimatorus
Гость
Re: Как отслеживать появление новых файлов в папке?
«
Ответ #6 :
Октябрь 20, 2011, 16:12 »
Тогда такой вопрос (я мертвого за..бу, знаю))). Может кто знает, смогу ли открыть файл через open если он еще не скопировался. Возможно к нему не будет доступа? и эту проблему можно будет решить просто в цикле пытаться его открыть?
То что мне нужно, должно примерно выглядеть как автоимпорт в PokerTracker (для тех кто в теме).
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Как отслеживать появление новых файлов в
«
Ответ #7 :
Октябрь 20, 2011, 16:20 »
Сможешь ли ты открыть зависит от того, как файл открывался на запись, по крайней мере под виндой.
Тут
почитай про dwShareMode.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
marbius
Гость
Re: Как отслеживать появление новых файлов в папке?
«
Ответ #8 :
Октябрь 25, 2011, 17:33 »
Здравствуйте!
Хотя и не совсем по теме, но все-же
А вот мне QFileSystemWatcher не помог ни при каких "усилиях".
Когда мне нужно было отслеживать изменения в директориях (добавление/удаление/переименование/изменение файлов), то единственное, что мне "по-настоящему" смогло помочь, так это просмотр по таймеру содержимого контролируемой директории и сравнение ее с предыдущим состоянием (в моем случае мне хватало 1 проверки в 10 секунд).
Кроме того, я могу однозначно сказать, что и штатные средства Windows давали сбои в контроле за изменением директории (MASM): иногда почему-то "пропускалось" переименование и изменение файла.
Поэтому для себя я сделал вывод, что только таймер и сравнение атрибутов.
У этого метода есть и некоторый "побочный эффект": если сохранить последнее состояние контролируемой директории в файл по выходу из программы, а при запуске его считать, то можно получить отслеживание изменений даже при не запущенной программе.
«
Последнее редактирование: Октябрь 25, 2011, 17:38 от µarbius
»
Записан
marbius
Гость
Re: Как отслеживать появление новых файлов в папке?
«
Ответ #9 :
Октябрь 25, 2011, 18:31 »
Цитата: Пантер от Октябрь 20, 2011, 16:07
Но это не вариант, если при копировании файл сразу ресайзится на полный размер.
Кстати, при использовании вышеописанного мною метода. Для новых файлов, бОльших, чем 50 мБ (не знаю, откуда я взял эту цифру - просто наобум) я считал CRC32 в течение 3х циклов и, если суммы совпадали, то файл считался более неизменным (это я использовал на случай применения разного рода менеджеров загрузок, которые ресайзят, в большинстве случаев, на полный размер)
Пусть метод весьма и извращенный, и нагружающий систему, но вполне оказался работоспособным.
Спасибо
Записан
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: Как отслеживать появление новых файлов в папке?
«
Ответ #10 :
Октябрь 25, 2011, 21:55 »
Цитата: Dimatorus от Октябрь 20, 2011, 16:12
Тогда такой вопрос (я мертвого за..бу, знаю))). Может кто знает, смогу ли открыть файл через open если он еще не скопировался. Возможно к нему не будет доступа? и эту проблему можно будет решить просто в цикле пытаться его открыть?
Это ОС-зависимо
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...