The method I used in the past is a combination of some other answers here. that is, an FTP file with a different extension to the expected one (for example, FILENAME.part), and then rename it with the corresponding extension as the last upload step.
On the server, use FileSystemWatcher to search for new files with the correct extension. FSW will not see the file until it is renamed, and the rename operation will be atomic, so the file will be completed and available at the time of renaming.
Renaming or moving files, of course, depends on what you control the download process.
If you do not have any control over the downloading of files, you will depend on the use of FSW to know that the file is loading, and then keep track of its size - if it has not changed over a long period of time, it is able to assume that it is completed.
source share