Основной метод, обеспечивающий собственно передачу файла – Upload(локальное_имя_файла, имя_файла_на_сервере). Например:
FTP.Upload(‘C:\1.htm’,’1.htm’)
Так как в подавляющем большинстве случаев имя файла на сервере совпадает с локальным (нечего создавать лишнюю путаницу), то в рассматриваемом примере этот метод вызывается следующим образом:
Upload(Trim(fn),ExtractFileName(Trim(fn)));
А в какой каталог на сервере попадет файл? Для смены текущего каталога, в который записываются файлы, предназначен метод ChangeDir(имя_каталога). У него есть одна неприятная особенность: смена каталогов может производиться только пошагово, по одному каталогу за шаг. Например, чтобы перейти в каталог public_html/win/main, необходимо вызвать метод ChangeDir трижды:
FTP. ChangeDir(‘public_html’);
FTP. ChangeDir(‘win’);
FTP. ChangeDir(‘main’);
После выполнения данного метода указанный каталог остается текущим. Чтобы не запутаться при передаче файла в произвольный каталог, в программе использована функция
FTPChangeDir(VAR f:TNMFTP;s:STRING):BYTE;
На вход ей подается ссылка на компонент типа NMFTP и текстовая строка – имя каталога (вида public_html/win/main), а возвращает она число потребовавшихся вызовов метода ChangeDir. В функции переданная текстовая строка разделяется по символам-разделителям “\” и для каждого выделенного названия каталога выполняется метод ChangeDir. Возвращаемое же значение запоминается в переменную deep. Зачем? Чтобы при передаче следующего файла снова оказаться в исходной точке – корневом каталоге сервера. Для этого надо выполнить команду «перейди в каталог более высокого уровня» столько раз, сколько раз был выполнен метод ChangeDir. Для этого используется цикл:
FOR i:=1 TO deep DO
ChangeDir('..')