Единственный процесс, который знает, является ли или не файл полностью скопирован один делает копирование. Подумайте об этом - файл представляет собой просто поток данных. Без дополнительной информации нет способа узнать, сколько данных должно быть в файле.
Без какой-либо связи, что файл полностью скопирован, единственное, что может сделать любой другой процесс, - это угадать, основываясь на том, что файл не открыт и не написан больше, а затем надеется, что догадка верна. Все, что связано с файлом, которое больше не записывается и не открывается открытым каким-либо другим процессом, не может обрабатывать сбои. Если файл копируется процессом, таким как FTP, и по какой-либо причине сетевое соединение падает в середине копирования файла, процесс «догадки и надежды» неправильно идентифицирует файл как завершенный.
Существует несколько способов решения этой проблемы, но все они требуют, чтобы процесс отправки посылал сигнал какого-либо типа получателю, что файл сделан.
Возможно, процесс отправки отправит файл «DONE» - после отправки DataFile
процесс отправки затем отправит файл нулевой длины с именем DataFile.done
. Как только вы увидите DataFile.done
, вы точно знаете, что DataFile
был полностью скопирован. Если вы не видите DataFile.done
, DataFile
не полностью скопирован.
Вы также можете отправить процесс переименования файла - если ваша базовая ОС и файловая система поддерживают операции переименования атома. Сначала вы можете отправить свой процесс отправки DataFile.copying
, а после завершения копирования переименуйте файл в DataFile
. Любой файл, который имеет расширение .copying
, все еще находится в процессе копирования.
В некоторых форматах файлов данных также указываются полные файлы. Файлы PDF следуют указанному формату, и вы можете узнать, завершены ли они. Файлы XML могут быть сконструированы таким образом, чтобы вы могли узнать, завершены ли они. Но это не эффективное решение, так как требует анализа содержимого файла, и если файлы большие или есть требования к производительности, непрерывное чтение каждого файла несколько раз может привести к серьезным проблемам с производительностью ввода-вывода.
Опять же, вы не можете решить эту проблему без отправки процесса отправки какого-либо флага DONE.Процесс приема просто не имеет достаточного количества данных, чтобы делать что-либо другое, кроме как догадываться, когда файл сделан, и тогда он может только надеяться, что он сделал правильное предположение.
Системы, которые полагаются на угадывание и надежду, как правило, не очень надежны.
Спасибо .. но как я могу добавить несколько фильтров файлов – techno
ссылается на редактирование для этого – Kayani
Это не может обрабатывать частичные копии файлов, если процесс копирования завершился с ошибкой при копировании файла, например, при удалении FTP-соединения в середине отправки файл. –