|
|
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Здравствуйте уважаемые! тут столкнулся с проблемой при чтении из файла выбрасывает эксепшен: Код: plaintext как можно узнать доступность файла? или надо через вайл проверять в цикле? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2017, 10:26 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Музаффар, через вайл? File.canRead(), например? А в цикле, или как ещё, это уже ваши бизнес требования надо смотреть. Но вообще, проблема часто вылазит, если вы где-то файлы не закрываете. Особенно при записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2017, 10:39 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Код: java 1. 2. 3. 4. прослушивается каталог, и с поступлением нового файла читается, парсится и т.д. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. прикол в том что иногда я получаю эксепшн иногда все гладко идет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2017, 10:52 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Музаффар, Заведи ScheduledExecutorService и в случае исключения кидай туда задачу обработки файла. У задачи заведи счетчик, чтобы после N попыток её отменить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2017, 11:18 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, разве f.canRead() && f.canWrite() && f.exists() не обеспечивает условие? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2017, 12:10 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
как я понял тут говорится что canWrite() и т.д. не помогут? https://stackoverflow.com/questions/1500174/check-if-a-file-is-locked-in-java ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2017, 12:42 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Скорее всего два процесса (потока) крутят вотчеры и гоняют гонки за f.canRead()... e.t.c Надо внимательно смотреть в ps -aux или tasklist на предмет процессов которые должны были умереть но не умерли. Такое я иногда наблюдал при mvn test или если несколько сеансов тестирования были запущены из среды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2017, 13:45 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
maytonСкорее всего два процесса (потока) крутят вотчеры и гоняют гонки за f.canRead()... e.t.c как два? можно по подробнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2017, 13:55 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Музаффарпрослушивается каталог, и с поступлением нового файла читается, парсится и т.д. Это неправильно, поскольку файл сначала появляется, потом в него записывается содержимое, потом он закрывается. Читать и парсить его можно только после последней операции, а уведомление ты получаешь о первой. Если есть возможность изменить логику софтины, которая файл записывает, то следует использовать такую: файл открывается с временным расширением, записывается, закрывается, переименовывается. Тогда по поступлению события переименования ты можешь его спокойно открывать, читать, парсить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2017, 14:02 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, так так так изначально хотел задавать именно этот вопрос как вообще происходит копирования файла вот и ответ, и получается я должен реагировать не на ENTRY_CREATE а на ENTRY_MODIFY? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2017, 14:13 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
а такая решения задачи допускается? с точки зрения правильного кодинга? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2017, 18:00 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
МузаффарmaytonСкорее всего два процесса (потока) крутят вотчеры и гоняют гонки за f.canRead()... e.t.c как два? можно по подробнее Когда возникнет проблема - сделай в консоли Код: java 1. и покажи что вышло. Потом я разовью мысль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2017, 18:03 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Как делаю я: При получении оповещения о появлении нового файла пытаюсь его открыть в монопольном режиме. Если не получается, в цикле жду некоторый интервал и снова пытаюсь открыть. Если суммарное время интервалов превышает некий максимум, считаю, что с файлом поработать не случилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2017, 19:10 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Друзья. Я думаю еще стоит нам всем обратить внимание на FileLock::lock() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2017, 19:22 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
mayton Код: java 1. и покажи что вышло. Потом я разовью мысль. сорри но как это делается? да скорее проблема в локе походу... а чем мой вариант плох? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2017, 21:18 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
[рукалицо] Открой консоль (что у тебя Windows или RHEL) и набери текст который я тебе набил. В ответ тебе выскочит список java процессов запущенных в данный момент. Я подозреваю что ты не прибил старый процесс и сам себя заблочил.... Фууууххх.... Ферштейн? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2017, 21:37 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
mayton, винда, йа йа... )) но не всегда есть эксепшен... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2017, 21:47 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
вот что получил при добавлении нового файла... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2017, 21:49 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
По сведеньям jps вроде все ОК. У тебя 1 процесс TrainTables.main. Это хорошо. Значит причины блокировки либо в 3-м приложении (антивирус?) либо ты так написал код что блокируешь сам себя. Теперь вопросы: 1) Откуда ты взял этот код? Сам написал? Код: java 1. 2. 3. 4. Здесь между проверкой на canRead(), canWrite() есть ненулевой тик времени когда файл теоретически может быть захвачен другим потоком (процессом). Нарушается базовый принцип работы с блокировками. Ты не можешь пробовать или щупать статус блокировки. Ты должен блокировать сразу. 2) Я до конца не помню как работает WatchService. Но может-ли он ловить своё собственное эхо? Тоесть поймать положительную обратную связь от процесса readingFile? И что внутри raeadingFile? Поток? Асинхронный вызов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2017, 22:01 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
mayton, может быть проблема в антивире... счас узнаем, и так выключил автоматическую защиту антивира, 3 раза зациклился... значит антивир не причем. авторлибо ты так написал код что блокируешь сам себя. ну вотчер был взять кдето из доках оракла... автор Откуда ты взял этот код? Сам написал? сам, думал поможет так как в доке написан для чтения (Tests whether the application can read the file denoted by this abstract pathname.) а для записи (Tests whether the application can modify the file denoted by this abstract pathname.) как я понял тут может ли читать, может ли записать... авторЗдесь между проверкой на canRead(), canWrite() есть ненулевой тик времени когда файл теоретически может быть захвачен другим потоком (процессом). Нарушается базовый принцип работы с блокировками. Ты не можешь пробовать или щупать статус блокировки. Ты должен блокировать сразу. может быть а может на самом деле файл сначала появляется, потом в него записывается содержимое, потом он закрывается и вотчер при появлении собирается читать когда ОС ещё записывает туда инфо? автор2) Я до конца не помню как работает WatchService. Но может-ли он ловить своё собственное эхо? Тоесть поймать положительную обратную связь от процесса readingFile? И что внутри raeadingFile? Поток? Асинхронный вызов? возможно и я не до конца понимаю... хз, но когда ридингФайл не смог получить доступ Вотчер сразу давал ислкючения и завершал процесс полностью нет не поток можно сказать да, хотя об этом не думал даже... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2017, 22:23 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Музаффарвозможно и я не до конца понимаю... хз, но когда ридингФайл не смог получить доступ Вотчер сразу давал ислкючения и завершал процесс полностью нет не поток можно сказать да, хотя об этом не думал даже... Мне остается только вздыхать и сочувственно кивать. У меня-же нет никаких сведений по readingFile(...). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2017, 00:19 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Хм... я скопировал 1 единственный html файл и ошибка сразу воспроизвелась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2017, 11:42 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Я провел еще один эксперимент в большим файлом (1.4Г) и убедился что событие ENTRY_CREATE прилетает до завершения финализации копирования. Это немножко не то событие. Нам по хорошему нужно реагировать на закрытие (CLOSE) файла после копирования. Я ищу в спеках WatchService но ничего не нахожу. Бесконечный цикл с проверкой canRead(), canWrite() является по моему мнению нехорошим паттерном. Мне не верится что имемнно такой подход используется в веб-контейнерах к примеру для мониторинга изменений *.jsp. Скорее всего там нечто более умное. Вот это умное нам надо найти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2017, 12:50 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
mayton, типа такого http://www.java2s.com/Tutorials/Java/java.nio.file/WatchService/Java_WatchService_close_.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2017, 13:00 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
проблема без ответа http://www.cyberforum.ru/java-j2se/thread1215925.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2017, 13:02 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
maytonНам по хорошему нужно реагировать на закрытие (CLOSE) файла после копирования. Я ищу в спеках WatchService но ничего не нахожу. Потому что нет его: https://msdn.microsoft.com/en-us/library/windows/desktop/aa364391(v=vs.85).aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2017, 13:51 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
mayton, да кстати я забыл выложит нужные файлы тоже чтоб вы посморели итоговый файл... кстати все таки уважаемый Dimitry Sibiryakov говорил на счет копирования... а на счет canRead и canWrite можно их убрать все равно такая ситуация будет, там только изза do while программа не падает а так падал бы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2017, 13:56 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Музаффарприкол в том что иногда я получаю эксепшн иногда все гладко идет...А что за приложение, которое создает/копирует файлы в эту папку? Вами разработана? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2017, 22:53 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Раскомментарил типы событий. Понаблюдал за событиями от вотчера. Если мы копируем файл ненулевой длины то получаем: 1) Одно событие ENTRY_CREATE 2) Пакет событий ENTRY_MODIFY Вобщем-то мой поинт в том что нужно завести какую-то служебную структуру тира Map<File,State> и фиксировать статус файла. На каждое событие обновлять статус. И если детектирован факт перехода с ENTRY_MODIFY файла X на ENTRY_CREATE файла Y то мы (условно) считаем что файл Х завершил свою дозапись (append). Мой поинт основан на предположении что файловые блокировки дороже стоят и нам лучше их использовать по минимуму. Еще один поинт. В силу сложности организации самого процесса вотчинга (сопряжение с файловой системой) и много шумящих событий мы никогда не добъемся отсуствия IOExceptions. Они всегда будут. Но мы сможем снизить их вероятность. И последний поинт. Это уже относится к процессу который создает html файлы. Его можно сделать так чтобы он создавал файлы с расширением *.$$$ а после финализации переименовывал в html. Этот хинт часто используют в Linux для достижения определенной атомарности файловых событий и для защиты от случайного захвата скриптом недописанного архива (к примеру). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2017, 23:40 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Вот жеж люди ... Умный человек уже сказал что делать: создать, заполнить, закрыть, переименовать (переместить). Но, блин, мы вы создадим кучу костылей, но не будем делать правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2017, 06:12 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovВот жеж люди ... Умный человек уже сказал что делать: создать, заполнить, закрыть, переименовать (переместить). Но, блин, мы вы создадим кучу костылей, но не будем делать правильно. ты почитай внимательно, прежде чем высказываться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2017, 06:53 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
UsmanА что за приложение, которое создает/копирует файлы в эту папку? Вами разработана? это левая даже можно сказать основная корпоративная система из далеких 70-80х... mayton, это все ради того что Вы опасаетесь, что процесс (ОС) может не давать разрешение и я не выхожу из цикла? но если счетчик то: с одной стороны тоже можно, но мы может и никогда не получим нужную инфу а это совсем не есть хорошо мне кажется, т.е. это будет последней точкой для проекта, т.к. не годный... думаю тоже не айс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2017, 07:38 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
maytonИ последний поинт. Это уже относится к процессу который создает html файлы. Его можно сделать так чтобы он создавал файлы с расширением *.$$$ а после финализации переименовывал в html. Этот хинт часто используют в Linux для достижения определенной атомарности файловых событий и для защиты от случайного захвата скриптом недописанного архива (к примеру). кстати это тестовый модуль и в конечном продукте я не создам файл хтмл или ещё что то, после парсинга адресату вышлю/покажу ответ в табличном виде... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2017, 07:43 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
maytonесли детектирован факт перехода с ENTRY_MODIFY файла X на ENTRY_CREATE файла Y то мы (условно) считаем что файл Х завершил свою дозапись (append). А потом в каталог приходят два писателя и мы опять удивляемся почему у нас в файле только половина содержимого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2017, 13:45 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
из сказанных сделал пока так... Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2017, 15:49 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Музаффарэто левая даже можно сказать основная корпоративная система из далеких 70-80х...будет круто, если получится подрубиться прямо к базе той системы... такое ощущение, что это просто экспорт табличных данных в файл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2017, 16:22 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Usmanбудет круто, если получится подрубиться прямо к базе той системы... такое ощущение, что это просто экспорт табличных данных в файл Да было бы круто но вот система вообще не использует субд, прямого доступа к систему не имеется и работаю через так называемый концентратор... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2017, 21:56 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
что то все замолчали... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 07:56 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Музаффарчто то все замолчали... Решение через Thread.sleep() плохо тем что оно кушает потоки. Если вы используете пул в 10 потоков для обработки входящих файлов, то 10 файлов достаточно чтобы ваш пул усыпить на довольно продолжительное время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 08:23 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Музафар мне щас некогда я убегаю. Несколько поинтов: 1) Мы обрабатываем события файловой системы медленнее чем они поступают. Это не есть гуд т.к. будут потери событий (там есть спец константа для этого) либо (возможно) будет другая ситуация. Тебе и участникам топика надо выкурить док по Watcher полностью. 2) Я-бы предложил обрабатывать события в Executor. Но перед этим события должны пройти некую умную фильтрацию о которой я писал выше. Тоесть убрать "дребезг" или многократное срабатывание ENTRY_MODIFY. Вечером продолжим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 08:51 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
BlazkowiczРешение через Thread.sleep() плохо тем что оно кушает потоки. Если вы используете пул в 10 потоков для обработки входящих файлов, то 10 файлов достаточно чтобы ваш пул усыпить на довольно продолжительное время. а TimeUnit.SECONDS.sleep(); ? или это тоже самое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 10:25 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Музаффара TimeUnit.SECONDS.sleep(); ? или это тоже самое? Код: java 1. 2. 3. 4. 5. 6. 7. 8. Таким нехитрым способом вы не усыпляете потоки почем зря. А в случае ошибки закидываете задачу в очередь, а поток может заняться обработкой других файлов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 10:31 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, спасибо за советы, кстати после анализа я так понял что мне достаточно секунда задержки чтоб система разлочил копируемый файл... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 11:19 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
BlazkowiczТаким нехитрым способом вы не усыпляете потоки почем зря. А в случае ошибки закидываете задачу в очередь, а поток может заняться обработкой других файлов. Я бы даже вообще все файлы сначала в executor пулял, чтобы дать время завершить запись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 11:21 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
А потом в каталог приходят два писателя и мы опять удивляемся почему у нас в файле только половина содержимого. Замечание ценное. И справедливое. Выше я уже упоминал что на интерфейсе Watcher мы не сможем 100% точно отработать событие ::close() и нам придется делать несколько "пристрелочных" выстрелов по файлу с целью поймать состояние когда он уже финализирован. Еще. До того как начнет работать HtmlParser я-бы предложил в целях оптимизации прогнать валидатор. Это новая алгоритмическая сущность которую нужно создать. Валидация будет проходить по критериям - размер файла (мы не будем брать в обработку файлы меньше 2Кб к примеру) - простейшая проверка на консистентность (для html-файла к примеру это наличие финализирующего тега </html>) Если файл не проходит валидацию то мы откладываем его парсинг на некоторое время. Предполагается что внешний процесс еще пишет этот файл. Еще. Блажкович предложил делать таймаут перед повторной обработкой файла с ScheduledExecutedService. Я-бы предложил ввести опцию "растущего таймаута" по экспоненте. Данная опция позволит не "долбить" по очень длинным и часто изменяющимся файлам (два процесса сливают два лога) а просто отодвинуть их обработку на потом в связи с неудачами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 21:38 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
mayton, мне кажется что Вы взялись на проблему очень глобально... это конечно радует но и пугает... авторнам придется делать несколько "пристрелочных" выстрелов по файлу с целью поймать состояние когда он уже финализирован да и получить эксепшен если файл не разлочан, так? ну дальше обработать этот эксепшн авторДо того как начнет работать HtmlParser я-бы предложил в целях оптимизации прогнать валидатор. Это новая алгоритмическая сущность которую нужно создать. Валидация будет проходить по критериям - размер файла (мы не будем брать в обработку файлы меньше 2Кб к примеру) - простейшая проверка на консистентность (для html-файла к примеру это наличие финализирующего тега </html>) придется брать файлов меньше 2КБ :) и файлы не более чем 1МБ (если я не ошибаюсь) второго я не совсем понял при чем тут хтмл файл? авторЕсли файл не проходит валидацию то мы откладываем его парсинг на некоторое время. Предполагается что внешний процесс еще пишет этот файл. и не легче ли просто ждать скажем 1секунд перед началом парсинга и после появлении файла как предлагал Блазкович? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 07:08 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
А как вы переименуете если файл залочен? Мне кажется не средства узнать о разлочке кроме долбления с райзе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 07:55 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Понял. Писать в темп, а ловить свой файл? Если событие работает, то более ничего не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 07:57 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Музаффарпридется брать файлов меньше 2КБ :) и файлы не более чем 1МБ (если я не ошибаюсь) второго я не совсем понял при чем тут хтмл файл? Это в качестве примера я взял. Почти любой файловый формат имеющий спецификацию позволяет определять свою валидность. К примеру. Бинарные форматы указывают свой размер в заголовке (прямо или косвенно). Бинарные или символьные потоковые форматы (xml, json) имеют ярко выраженные старт-стопные последовательности по которым можно точно сказать что файл финализирован. и не легче ли просто ждать скажем 1секунд перед началом парсинга и после появлении файла как предлагал Блазкович? Можно ждать 1 или 2 секунды. Эту цифро подобрать экспериментально исходя из оптимального времени "готовности" файла. Вообще таймаут - это нормальное состояние например в сетевых протоколах. Единственный момент - не делать sleep(..) внутри потока. А как-то по другому возвращать в пул неработающих потоков. Например как предложил Блажкович. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 08:16 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
mayton, мы просто так исходя из содержимого не можем конкретно сказать что файл закончился или ещё туда пишутся данные, т.к. разные файлы точнее разные содержания. да со слипом все так посоветовали, хотя самым легким вариантом был :) вот с шедулером не могу разобраться что к чему... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 08:24 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Музаффарmayton, мы просто так исходя из содержимого не можем конкретно сказать что файл закончился или ещё туда пишутся данные, т.к. разные файлы точнее разные содержания. Это твои файловые форматы Spravka02,93... ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 08:49 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Музаффар, Задача подсистемы выдать событие конца записи файла. Я бы валидацию делал ИС. Один доп.поток справится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 09:18 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
mayton, это шаблоны справок для парсинга а так получаю такого рода файлы наименования тоже специфическая 01022400.00Х (расширения начинается с 000 по FFF) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 09:24 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Музаффар, Openfiles - Queries or displays open files. Also queries, displays, or disconnects files opened by network users. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 15:43 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Usman Openfiles - Queries or displays open files. Also queries, displays, or disconnects files opened by network users. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 16:58 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Если всё происходит "на винде", то перемещать (since 1.7) файлы из исходного каталога в промежуточный. Самый хороший вариант - научить перемещать готовые к обработке файлы их поставщика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 17:14 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovЕсли всё происходит "на винде", то перемещать (since 1.7) файлы из исходного каталога в промежуточный. Самый хороший вариант - научить перемещать готовые к обработке файлы их поставщика. ну читать же надо тс .... чтоб переместить надо чтоб файл был свободен. а когда писался поставщик винда была в зачатке.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 17:32 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
ReadDirectoryChangesW function и отслеживать с такими параметрами: - FILE_NOTIFY_CHANGE_SIZE - FILE_NOTIFY_CHANGE_LAST_WRITE периодически вызываем функцию и выЩЩитываем разницу (размер/время)... и по истечении определенного интервала можно сделать вывод, что в файл уже никто не пишет. реализовать можно при помощи JNA ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 17:33 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
вадяну читать же надо тс ....Именно. Топикстартеру требуется начинать обработку файла тогда, когда поставщик закончил запись в него. Если добавить промежуточное перемещение, то (в случае Windows) файлы, попавшие в этот промежуточный католог - гарантированно готовы к обработке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 18:40 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Usmanреализовать можно при помощи JNA При помощи JNA (или даже без его помощи) можно просто открывать файл с опцией, дающей ошибку, если файл уже открыт на запись. Гораздо проще обработать ошибку, чем рожать (негарантированную) эвристику. Но, опять-таки, в юниксах с файловыми блокировками не очень хорошо: чтобы работало, правила должны соблюдать все участники. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 18:45 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovИменно. Топикстартеру требуется начинать обработку файла тогда, когда поставщик закончил запись в него. Если добавить промежуточное перемещение, то (в случае Windows) файлы, попавшие в этот промежуточный католог - гарантированно готовы к обработке. ты читал что делал mayton ? он копировал файл. копировал средствами windows. не писал "поставщиком" , а копировал созданный файл. Basil A. SidorovПри помощи JNA (или даже без его помощи) можно просто открывать файл с опцией, дающей ошибку, если файл уже открыт на запись. Гораздо проще обработать ошибку, чем рожать (негарантированную) эвристику.что и делает 20625966 . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 20:04 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, Конечно, чем проще тем лучше. Раз в 5 минут идет поток и перекидывает файлы в папку /My/.... Те что смог, они ушли на обработку. Железобетонный энтерпрайз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 20:06 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Petro123Конечно, чем проще тем лучше. Раз в 5 минут идет поток и перекидывает файлы в папку /My/.... Те что смог, они ушли на обработку. Железобетонный энтерпрайз.прослушиваем папку /My/...., нарываемся на файл, который копируется и возвращаемся к началу топика.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 20:12 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
вадя, Ты не в курсе что переписывание мгновенное? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 20:28 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Petro123вадя, Ты не в курсе что переписывание мгновенное?как-то не приходилось с этим сталкиваться ... перенос - да, когда из одной папки в другую - только в mfs переписывается.... но сначала надо дождаться когда файл освободится, потом перенести - гораздо проще и быстрее так обработать 20625966 Petro123Раз в 5 минут ии кто будет ждать 5 минут? когда проще и быстрее обработать эксепшен при обращении к файлу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 20:44 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
вадя, А когда обращатся, если он еще пишется? Быстрота нужна при ловле блох. А в Ынтырпрайзе - надежность и простота. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 20:48 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Petro123А когда обращатся, если он еще пишется? Быстрота нужна при ловле блох. А в Ынтырпрайзе - надежность и простота.когда пишется - происходит эсепшен. его и обрабатываешь в цикле. этих циклов примерно 5-8. файлы маленькие. делать "универсальное" для произвольного размера - нет смысла - файлы маленькие, мах 10к.... стабильно до 1к. чем предложенный вариант не прост и не надёжен? (единственно - добавить счётчик циклов, для выхода из цикла) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 20:57 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Petro123Быстрота нужна при ловле блох.юзер запросил данные и сидит курит 5 минут.....21 век б...ь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 20:58 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
вадя, Тем что у тебя 8 циклов, а с константой 2 мин или 5 будет 2 прохода. А вообще, мне пофигу. Делай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 21:00 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Petro123Тем что у тебя 8 циклов, а с константой 2 мин или 5 будет 2 прохода. А вообще, мне пофигу. Делай.8 циклов 100мс, или 2 прохода за 5 минут - есть разница? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 21:04 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Petro123А вообще, мне пофигу.супер аргумент профи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 21:05 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
В этом шаблоне есть уникальная стоп-последовательность типа смайлика. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 22:56 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
вадяты читал что делал mayton ? он копировал файлРазницу между "скопировать" и "переместить" совсем не понимаем? Если вы не в курсе возможности копировать открытые на запись файлы, то уж опция ATOMIC_MOVE функции NIO-пакета должна была навести хоть на какие-то мысли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2017, 02:37 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorovвадяты читал что делал mayton ? он копировал файлРазницу между "скопировать" и "переместить" совсем не понимаем? Если вы не в курсе возможности копировать открытые на запись файлы, то уж опция ATOMIC_MOVE функции NIO-пакета должна была навести хоть на какие-то мысли? был предложен вариант с ожиданием ,через эксепшен без шедулера, чем он плох? зачем городить ещё перемещение и пр. в любом случае надо дожидаться окончания записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2017, 05:32 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Petro123вадясупер аргумент профи спорить до усрачки по миллисекундам только у тебя получается. когда не можешь аргументированно ответить — переход на дичности не украшает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2017, 05:39 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
mayton, я так понимаю, у ТС проблем с парсингом нет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2017, 05:40 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
вадя, Все решения рабочие. Дальше надо по месту ТСу решать. Тестовую площадку делать. Дон Ки Хот ты наш. Ферштейн? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2017, 06:54 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
maytonВ этом шаблоне есть уникальная стоп-последовательность типа смайлика. да только в этом ответе, иногда именно этот запрос но нет последних строк, к тому же счас делаю для двух запросов и там по 25 как минимум разновидностей т.е. по содержимому запроса меняется получаемый ответ к примеру запрос 212 требуется 93я справка по станцию А (код станции скажем 1000) мы должны писать: (:212 0 1000:93:) есть справка 95 там уже другой ответ (:212 0 1000:95:) и не у всех заканчивается со смайликом... кстати для перемещение нам не обязательно знать файл залочан/разлочан? если это залочанный файл то не можем переместит то в чем вопрос? мы все равно должны ждать пока система не отпустит... а на счет файла может я не правильно делал хз, но когда использовал метод available() то всегда получил один и тот же размер файла при том итоговый размер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2017, 06:56 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Petro123вадя, Все решения рабочие. Дальше надо по месту ТСу решать. Тестовую площадку делать. Дон Ки Хот ты наш. Ферштейн? вот это ответ, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2017, 07:06 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Petro123Дон Ки Хот ты наш. ))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2017, 07:10 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Музаффар, Открой текст файл и пробуй переместить. Если райзе, то не готов. До след.раза. Не понял алгоритм? )). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2017, 08:19 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Petro123, если файл открыт то система не даст перемещать, или не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2017, 08:33 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Petro123, если это файловая шара - то нам может быть грантован доступ R/O. Впрочем можно уточнить у автора. Но удаление файла на ходу процесса записи, с точки зрения другого процесса - это как-бы не по "джентльменски" и здесь надо искать какой-то мягкий протокол. Идеальный вариант это конечно расширение .lock или любое другое как маркер активности. Вообще вся беда этой постановки идет от dirty-режимов работы с файловой системой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2017, 09:19 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Музаффар, Не даст. Ты прямо счас не можешь без ррограммирлвания в проводнике проверить что ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2017, 09:20 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
mayton, Система же многопользовательская? Я не раз встречал метод проверки - открыть на запись с райзе. Ты прав, надо тз смотреть. А то что бд нет, сами себе ССЗБ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2017, 09:26 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
Petro123, об этом и я говорю что система не даст это сделать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2017, 10:21 |
|
||
|
доступ к файлу
|
|||
|---|---|---|---|
|
#18+
МузаффарPetro123, об этом и я говорю что система не даст это сделать... Ты эмоционально не окрасил пост)). Т.е. топик закрываем и ты пошел делать тесты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2017, 12:31 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2122763]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
103ms |
get tp. blocked users: |
1ms |
| others: | 189ms |
| total: | 377ms |

| 0 / 0 |
