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.
.
USER my_username
331 Password required for my_username.
.
PASS ****
230-Last unsuccessful login: Thu Oct 11 07:43:41 CDT 2007 on /dev/pts/555 from 99.99.99.99
230-Last login: Mon Jan 7 03:30:44 CST 2008 on ftp from ::ffff:99.99.99.99
230 User my_username logged in.
.
TYPE I
200 Type set to I.
.
SYST
215 UNIX Type: L8 Version: BSD-44
.
FEAT
500 'FEAT': command not understood.
.
PORT 99,99,99,99,5,95
200 PORT command successful.
.
RETR /some_file.dat
550 Read access denied