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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Проверка - открыт ли файл другим приложением [QT 4.6.0]  (Прочитано 12699 раз)
jjoss
Гость
« : Февраль 09, 2010, 19:49 »

Народ, есть ли в QT инструментарий для проверки того, открыт ли файл другим приложением?
Или всё таки, например, при разработке под Windows использовать API?
Записан
gigabyte
Гость
« Ответ #1 : Февраль 09, 2010, 20:54 »

1.Если ты делаешь какую-то системную утилиту, то только с использованием API системы
2. Можешь воспользоваться методом который использует Ворд и ексель, создать временный lock-файл (правда у них это файл отката а не простой lock-файл) и потом проверяешь его наличие и принимаешь соответственное решение
Записан
jjoss
Гость
« Ответ #2 : Февраль 09, 2010, 20:59 »

1.Если ты делаешь какую-то системную утилиту, то только с использованием API системы
2. Можешь воспользоваться методом который использует Ворд и ексель, создать временный lock-файл (правда у них это файл отката а не простой lock-файл) и потом проверяешь его наличие и принимаешь соответственное решение

Задача, в общих чертах, состоит в следующем. Есть два сторонних приложения. Первое делает выгрузку данных из базы в файл. Второе отправляет выгруженный файл по почте и УДАЛЯЕТ его. Два действия - выгрузку и отправку - осуществляет пользователь. Задача заключается в том, что нужен робот, который должен отловить момент, когда выгрузка закончена и "забрать" файл.
Записан
BRE
Гость
« Ответ #3 : Февраль 09, 2010, 21:06 »

Выгрузка происходит в файл с каким то специальным расширением, например upload. Когда все данные записаны в файл, он переименовывается.

Выгружается         Файл готов к отправке
data1.txt.upload   ->   data.txt
Записан
jjoss
Гость
« Ответ #4 : Февраль 09, 2010, 21:10 »

Выгрузка происходит в файл с каким то специальным расширением, например upload. Когда все данные записаны в файл, он переименовывается.

Выгружается         Файл готов к отправке
data1.txt.upload   ->   data.txt
Не получится. Выгружающая система написана давно и не мной. Исходников нет. Грустный
Записан
SimpleSunny
Гость
« Ответ #5 : Февраль 09, 2010, 21:13 »

Если файла нет, а потом он начинает заполняться, то он открывается на запись и читать из него нельзя. Можно проверить наличие файла, а потом пытаться открыть на чтение с некой периодичностью.
Записан
BRE
Гость
« Ответ #6 : Февраль 09, 2010, 21:15 »

Не получится. Выгружающая система написана давно и не мной. Исходников нет. Грустный
Написана давно, исходников нет..... платформа венда?  Улыбающийся
Записан
BRE
Гость
« Ответ #7 : Февраль 09, 2010, 21:16 »

Если файла нет, а потом он начинает заполняться, то он открывается на запись и читать из него нельзя. Можно проверить наличие файла, а потом пытаться открыть на чтение с некой периодичностью.
Тоже подумал использовать QFileSystemWatcher, только возможно что выгрузка идет с разными интервалами.
Записан
jjoss
Гость
« Ответ #8 : Февраль 09, 2010, 21:17 »

Не получится. Выгружающая система написана давно и не мной. Исходников нет. Грустный
Написана давно, исходников нет..... платформа венда?  Улыбающийся
Да, винда
Записан
jjoss
Гость
« Ответ #9 : Февраль 09, 2010, 21:19 »

Если файла нет, а потом он начинает заполняться, то он открывается на запись и читать из него нельзя. Можно проверить наличие файла, а потом пытаться открыть на чтение с некой периодичностью.
Так думал сначала. Но файл не блокируется при заполнении. Так, например, notepad работает - он не блокирует файл. Буду пробовать на основе этого реализовывать http://wasm.ru/article.php?article=lockfileswork. Но, чёт кажется, что есть более простой способ...
Записан
SimpleSunny
Гость
« Ответ #10 : Февраль 09, 2010, 21:24 »

Более простого метода нет. А блокнот не блокирует, ибо записывает туда информацию только при желании пользователя. А если программа тупо получила информацию из БД и сразу ее записала в файл, то метод на открытие вполне жизнеспособный.
Записан
jjoss
Гость
« Ответ #11 : Февраль 09, 2010, 21:37 »

А если программа тупо получила информацию из БД и сразу ее записала в файл, то метод на открытие вполне жизнеспособный.
Пробовал - не пашет... Придётся заморачиваться с хэндлами Улыбающийся Всё равно всем спасибо!!!
Записан
gigabyte
Гость
« Ответ #12 : Февраль 09, 2010, 21:50 »

сделай батник run.cmd:

myapp
copy result.txt upload.txt

сделай ярлык к нему и выставь на рабочий стол клыэнта
проверяй наличие файла upload.txt
Записан
BRE
Гость
« Ответ #13 : Февраль 09, 2010, 21:51 »

Тогда проще клиента заставить руками отчеты отправлять.  Смеющийся
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #14 : Февраль 09, 2010, 21:52 »

Цитировать
Более простого метода нет. А блокнот не блокирует, ибо записывает туда информацию только при желании пользователя. А если программа тупо получила информацию из БД и сразу ее записала в файл, то метод на открытие вполне жизнеспособный.

Че то не верится в жизнеспособность этого метода где вероятность того что эта чужая программа выгрузки не работает также как вышеупомянутый "блокнот"? То есть работает со своим буфером по мере выгрузки а пишет периодически по таймеру переоткрывая/перезаписывая файл? Кроме того что в вашей фразе значит
Цитировать
сразу ее записала в файл
- как так сразу? может эта выгрузка час длиться будет на реальных данных...

Эта чужая программа выгрузки - отдельный запускаемый файл? Тогда можно запускать ее, ждать завершения и только потом отправлять выгрузку. Вы вроде сказали что пользователь определяет когда нужно выгрузить - пусть щелкает ярлык не программы выгрузки а батника в котором сначала программа выгрузки, а потом программа отправки данных....

Цитировать
Тогда проще клиента заставить руками отчеты отправлять.
Если для выгрузки какая-то спец программа используется - то возможно на той стороне как раз робот сидит и статистику собирает - а человеку сложно вручную будет такое отправлять...

« Последнее редактирование: Февраль 09, 2010, 21:54 от break » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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