This blog post describes a Chilkat customer support case where the FTP server responds with a "550 Read access denied" when trying to upload a file. The remote filepath passed to PutFile was "/some_file.dat". Note the leading forward-slash — this was the cause of the problem. When the forward slash was removed, and "some_file.dat" was passed to PutFile, the problem was resolved.
Note: It should be possible to include both a path and filename in the remote-filepath argument to PutFile. For some reason, this particular FTP server responded with an access denied error when the directory part is included.
Here is a session log (IP addresses and names changed to be different than actual customer values):
220 abcxyz FTP server (Version 4.1 Fri Oct 7 10:57:51 CDT 2005) ready.
331 Password required for my_username.
230-Last unsuccessful login: Thu Oct 11 07:43:41 CDT 2007 on /dev/pts/555 from 184.108.40.206
230-Last login: Mon Jan 7 03:30:44 CST 2008 on ftp from ::ffff:220.127.116.11
230 User my_username logged in.
200 Type set to I.
215 UNIX Type: L8 Version: BSD-44
500 'FEAT': command not understood.
200 PORT command successful.
550 Read access denied