Название: Проверка - открыт ли файл другим приложением [QT 4.6.0] Отправлено: jjoss от Февраль 09, 2010, 19:49 Народ, есть ли в QT инструментарий для проверки того, открыт ли файл другим приложением?
Или всё таки, например, при разработке под Windows использовать API? Название: Re: Проверка - открыт ли файл другим приложением [QT 4.6.0] Отправлено: gigabyte от Февраль 09, 2010, 20:54 1.Если ты делаешь какую-то системную утилиту, то только с использованием API системы
2. Можешь воспользоваться методом который использует Ворд и ексель, создать временный lock-файл (правда у них это файл отката а не простой lock-файл) и потом проверяешь его наличие и принимаешь соответственное решение Название: Re: Проверка - открыт ли файл другим приложением [QT 4.6.0] Отправлено: jjoss от Февраль 09, 2010, 20:59 1.Если ты делаешь какую-то системную утилиту, то только с использованием API системы Задача, в общих чертах, состоит в следующем. Есть два сторонних приложения. Первое делает выгрузку данных из базы в файл. Второе отправляет выгруженный файл по почте и УДАЛЯЕТ его. Два действия - выгрузку и отправку - осуществляет пользователь. Задача заключается в том, что нужен робот, который должен отловить момент, когда выгрузка закончена и "забрать" файл.2. Можешь воспользоваться методом который использует Ворд и ексель, создать временный lock-файл (правда у них это файл отката а не простой lock-файл) и потом проверяешь его наличие и принимаешь соответственное решение Название: Re: Проверка - открыт ли файл другим приложением [QT 4.6.0] Отправлено: BRE от Февраль 09, 2010, 21:06 Выгрузка происходит в файл с каким то специальным расширением, например upload. Когда все данные записаны в файл, он переименовывается.
Выгружается Файл готов к отправке data1.txt.upload -> data.txt Название: Re: Проверка - открыт ли файл другим приложением [QT 4.6.0] Отправлено: jjoss от Февраль 09, 2010, 21:10 Выгрузка происходит в файл с каким то специальным расширением, например upload. Когда все данные записаны в файл, он переименовывается. Не получится. Выгружающая система написана давно и не мной. Исходников нет. :(Выгружается Файл готов к отправке data1.txt.upload -> data.txt Название: Re: Проверка - открыт ли файл другим приложением [QT 4.6.0] Отправлено: SimpleSunny от Февраль 09, 2010, 21:13 Если файла нет, а потом он начинает заполняться, то он открывается на запись и читать из него нельзя. Можно проверить наличие файла, а потом пытаться открыть на чтение с некой периодичностью.
Название: Re: Проверка - открыт ли файл другим приложением [QT 4.6.0] Отправлено: BRE от Февраль 09, 2010, 21:15 Не получится. Выгружающая система написана давно и не мной. Исходников нет. :( Написана давно, исходников нет..... платформа венда? :)Название: Re: Проверка - открыт ли файл другим приложением [QT 4.6.0] Отправлено: BRE от Февраль 09, 2010, 21:16 Если файла нет, а потом он начинает заполняться, то он открывается на запись и читать из него нельзя. Можно проверить наличие файла, а потом пытаться открыть на чтение с некой периодичностью. Тоже подумал использовать QFileSystemWatcher, только возможно что выгрузка идет с разными интервалами.Название: Re: Проверка - открыт ли файл другим приложением [QT 4.6.0] Отправлено: jjoss от Февраль 09, 2010, 21:17 Не получится. Выгружающая система написана давно и не мной. Исходников нет. :( Написана давно, исходников нет..... платформа венда? :)Название: Re: Проверка - открыт ли файл другим приложением [QT 4.6.0] Отправлено: jjoss от Февраль 09, 2010, 21:19 Если файла нет, а потом он начинает заполняться, то он открывается на запись и читать из него нельзя. Можно проверить наличие файла, а потом пытаться открыть на чтение с некой периодичностью. Так думал сначала. Но файл не блокируется при заполнении. Так, например, notepad работает - он не блокирует файл. Буду пробовать на основе этого реализовывать http://wasm.ru/article.php?article=lockfileswork. Но, чёт кажется, что есть более простой способ...Название: Re: Проверка - открыт ли файл другим приложением [QT 4.6.0] Отправлено: SimpleSunny от Февраль 09, 2010, 21:24 Более простого метода нет. А блокнот не блокирует, ибо записывает туда информацию только при желании пользователя. А если программа тупо получила информацию из БД и сразу ее записала в файл, то метод на открытие вполне жизнеспособный.
Название: Re: Проверка - открыт ли файл другим приложением [QT 4.6.0] Отправлено: jjoss от Февраль 09, 2010, 21:37 А если программа тупо получила информацию из БД и сразу ее записала в файл, то метод на открытие вполне жизнеспособный. Пробовал - не пашет... Придётся заморачиваться с хэндлами :) Всё равно всем спасибо!!!Название: Re: Проверка - открыт ли файл другим приложением [QT 4.6.0] Отправлено: gigabyte от Февраль 09, 2010, 21:50 сделай батник run.cmd:
myapp copy result.txt upload.txt сделай ярлык к нему и выставь на рабочий стол клыэнта проверяй наличие файла upload.txt Название: Re: Проверка - открыт ли файл другим приложением [QT 4.6.0] Отправлено: BRE от Февраль 09, 2010, 21:51 Тогда проще клиента заставить руками отчеты отправлять. ;D
Название: Re: Проверка - открыт ли файл другим приложением [QT 4.6.0] Отправлено: break от Февраль 09, 2010, 21:52 Цитировать Более простого метода нет. А блокнот не блокирует, ибо записывает туда информацию только при желании пользователя. А если программа тупо получила информацию из БД и сразу ее записала в файл, то метод на открытие вполне жизнеспособный. Че то не верится в жизнеспособность этого метода где вероятность того что эта чужая программа выгрузки не работает также как вышеупомянутый "блокнот"? То есть работает со своим буфером по мере выгрузки а пишет периодически по таймеру переоткрывая/перезаписывая файл? Кроме того что в вашей фразе значит Цитировать сразу ее записала в файл - как так сразу? может эта выгрузка час длиться будет на реальных данных...Эта чужая программа выгрузки - отдельный запускаемый файл? Тогда можно запускать ее, ждать завершения и только потом отправлять выгрузку. Вы вроде сказали что пользователь определяет когда нужно выгрузить - пусть щелкает ярлык не программы выгрузки а батника в котором сначала программа выгрузки, а потом программа отправки данных.... Цитировать Тогда проще клиента заставить руками отчеты отправлять. Если для выгрузки какая-то спец программа используется - то возможно на той стороне как раз робот сидит и статистику собирает - а человеку сложно вручную будет такое отправлять...Название: Re: Проверка - открыт ли файл другим приложением [QT 4.6.0] Отправлено: gigabyte от Февраль 09, 2010, 21:58 Тогда проще клиента заставить руками отчеты отправлять. ;D Ну незнаю как по мне то проще сказать "Нажми на работем столе красную розу" чем сказать:Нажми на выгрузку данных, потом зайди на мой компутер, на диск С папка "Данные" и скопируй файл result.txt в файл upload.txt ( И это идеальный вариант). На практике мне приходится около часа обяснять где находится "мой компутер" и что он не "Мой" а "Их" и какую кнопочку надо нажать чтоб там вывсетилось этакое окошечко ;D Название: Re: Проверка - открыт ли файл другим приложением [QT 4.6.0] Отправлено: jjoss от Февраль 09, 2010, 21:59 Вопрос несколько сложнее из-за человеческого фактора... Пользователи - тёти в возрасте, и новые ярлыки и всякие батники это просто кошмар... Да и клиентов очень много... Вот и изначально идея была - сделать, что бы эти тёти вообще ничего не знали и работали дальше, как и работали... Пока кроме хэндлов идей нет. Буду тестить используя их.
Название: Re: Проверка - открыт ли файл другим приложением [QT 4.6.0] Отправлено: gigabyte от Февраль 09, 2010, 22:02 Вопрос несколько сложнее из-за человеческого фактора... Пользователи - тёти в возрасте, и новые ярлыки и всякие батники это просто кошмар... Да и клиентов очень много... Вот и изначально идея была - сделать, что бы эти тёти вообще ничего не знали и работали дальше, как и работали... Пока кроме хэндлов идей нет. Буду тестить используя их. Вот я и предлагаю заменить команду в их стардартном ярлыке к которому они привыкли на батник.У меня здесь 2 фирмы так работают и програмы обновляются и конфиги и все по одному нажатию на ярлык Название: Re: Проверка - открыт ли файл другим приложением [QT 4.6.0] Отправлено: BRE от Февраль 09, 2010, 22:19 Пока кроме хэндлов идей нет. Буду тестить используя их. Чем использовать эту "технологию", попробуй сначала реализовать в лоб с QFileSystemWatcher?Не знаю, как происходит процесс выгрузки, но можно отслеживать появление нового файла в директории и ждать момента, когда он не изменяется некоторое время (например 5 минут), а после этого его отправлять. Название: Re: Проверка - открыт ли файл другим приложением [QT 4.6.0] Отправлено: jjoss от Февраль 09, 2010, 22:22 Пока кроме хэндлов идей нет. Буду тестить используя их. Чем использовать эту "технологию", попробуй сначала реализовать в лоб с QFileSystemWatcher?Не знаю, как происходит процесс выгрузки, но можно отслеживать появление нового файла в директории и ждать момента, когда он не изменяется некоторое время (например 5 минут), а после этого его отправлять. |