Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Копирование большого файла 
:(
    Опции темы
xbarmaglot
Дата 20.1.2016, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 28.8.2012

Репутация: нет
Всего: нет



Отслеживаю изменение файловой системы.
Если точно, то появление новых файлов в папке с помощью FileAlterationMonitor.

Если появился новый файл, то копирую его в определенное место.
Так вот, если файл очень большой, то событие на его появление приходит раньше, чем он скопируется в эту папку.
В результате, при попытке его скопировать в новое место происходит исключение.

Можно ли как настроить FileAlterationMonitor, чтоб событие приходило, когда файл полностью скопируется.
Или каким-либо способом дождаться самому полного копирования ?
PM MAIL   Вверх
LSD
Дата 20.1.2016, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



На уровне ОС нет такого понятия - "файл полностью скопировался". 
1. файл создается - атомарная операция
2. файл открывается на запись - атомарная операция, из внешних проявлений разве что блокировки файла
3. в файл пишутся данные - не атомарная операция, когда изменения станут видны сторонним процессам трудно предсказать
4. файл закрывается - записанные данные становятся полностью видимы всем

Если файл маленький то просто фазы 1-4 успевают выполнится до того как твой код выполнится, если большой - нет. Какого-то общего решения - нет.
Ты контролируешь код который пишет файлы в папку?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
xbarmaglot
Дата 20.1.2016, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 28.8.2012

Репутация: нет
Всего: нет



Цитата(LSD @  20.1.2016,  12:11 Найти цитируемый пост)
Ты контролируешь код который пишет файлы в папку?

Нет, это делает другой процесс.
Может у FileAlterationListenerAdaptor отслеживать не onFileCreate, а onFileChange и проверять на canWrite?
PM MAIL   Вверх
LSD
Дата 20.1.2016, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Тогда остается только мониторить изменения файла, если файл не менялся Х секунд, считать что все.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
a0730
Дата 20.1.2016, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 0
Регистрация: 1.6.2008

Репутация: нет
Всего: нет



Можно отслеживать изменения файла и через некоторое время (пара секунд) пытаться открыть файл на запись.

Как-то так:
File file = new File("путь к файлу");
FileChannel channel = new RandomAccessFile(file, "rw").getChannel();
Если получишь исключение, то ждать еще.


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0697 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.