Я всегда делал следующее:
a) get the size of the file, in bytes
b) append this to the filename eg MyFile.Dat.16384
c) send the file over ftp etc
на другом конце у вас есть программа, которая просматривает входящую папку FTP. Каждую секунду или около того (подстраиваясь под костюм) вы сканируете папку на наличие файлов, и когда вы обнаруживаете файл, размер файла которого соответствует строке в конце имени файла, вы можете быть достаточно уверены, что он прибыл и его можно свободно перемещать, переименовывать что угодно.
Мы встроили некоторую логику в сканирование, чтобы файл не был атакован до тех пор, пока он не обнаружился во второй раз при сканировании, просто для того, чтобы в последнюю секунду или около того возможная обработка / разблокировка со стороны FTP сервер.
Это довольно просто для Delphi, это просто структура типа findfirst / findnext / findclose в цикле, работающем по таймеру. Выключите таймер при запуске сканирования и перезапустите его, когда закончите.