Знание файла завершено или нет, до получения Java-файла Object - PullRequest
3 голосов
/ 23 декабря 2011

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

Как проверить, загружен ли файл полностью или нет перед обработкой?

Ответы [ 2 ]

8 голосов
/ 23 декабря 2011

Переименование имени файла является атомарным действием в большинстве (если не во всех) файловых системах. Вы можете использовать это, загрузив файл на узнаваемое временное имя и переименовав его, как только загрузка будет завершена.

Таким образом, вы «увидите» только те файлы, которые были полностью загружены и безопасны для обработки.

2 голосов
/ 23 декабря 2011

Ответ RSP очень хорош. Если, по какой-либо причине, он не работает для вас, и если ваш код опроса выполняется в процессе, отличном от процесса веб-сервера, который сохраняет файл, вы можете попробовать следующее:

Обычно, когда файл сохраняется, параметры совместного доступа «позволяют кому-либо читать» и «не позволяют никому писать». (эксклюзивная запись.) Таким образом, вы можете попытаться открыть файл также с монопольным доступом к записи: если это не удается, то вы знаете, что веб-сервер все еще держит файл открытым и выполняет запись в него. Если это удастся, то вы знаете, что веб-сервер готов. Конечно, обязательно попробуйте, потому что я не могу гарантировать, что именно так веб-сервер решит заблокировать файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...