It's not a C# solution, but Getright does this very well.
Programmatically, for writing files, I would think that to resume a transfer you'd need to connect in, read the file (or in some other way, identify how big it is) and then open it and append the remaining data. It might be worth checking that the last N bytes in the existing file match those in your local file. Reading would be similar - skip to a specific part of the file and start reading back.
[Edit] If you've managed to establish an FTP connection, the command you need is REST:
RESTART (REST)
The argument field represents the server marker at which file transfer is to be restarted. This command does not cause file transfer but skips over the file to the specified data checkpoint. This command shall be immediately followed by the appropriate FTP service command which shall cause file transfer to resume.
I'm sure there are a few simple C# ftp client libraries you could use if you've not already found/written one.