Метод, который я использовал в прошлом, представляет собой смесь некоторых других ответов здесь.
то есть FTP файл, использующий расширение, отличное от ожидаемого (например, FILENAME.part), затем переименуйте его с соответствующим расширением в качестве последнего шага загрузки.
На сервере используйте FileSystemWatcher для поиска новых файлов с правильным расширением.
FSW не увидит файл до тех пор, пока он не будет переименован, а операция переименования является атомарной, поэтому файл будет завершен и доступен в момент его переименования.
Переименование или перемещение файлов, конечно, зависит от того, как вы контролируете процесс загрузки.
Если у вас нет никакого контроля над тем, как файлы загружаются, вы будете зависеть от использования FSW, чтобы узнать, какой файл загружается, а затем контролировать его размер - когда он не меняется в течение длительного периода времени, вы можете быть в состоянии предположить это завершено.