Здравствуйте. Пишу программу для работы с FTP на языке C++ в среде RadStudio 2007. Программа должна выполнять копию данных с FTP-сервера. В процессе кодирования наткнулся на кучу вопросов, многие связаны они с компонентой TIdFTP из набора IndyClients. В классе есть возможность получать имена и атрибуты несколькими разными способами. Самый простой, насколько я понял, — это через параметр ListResult, представляющий TStrings* . Но неудобство такого способа в том, что строки возвращаются в таком же формате, как и в cmd.exe, вида
-rw-r--r-- 1 2143 600 6590 May 26 19:59 .htaccess
Другими словами, надо ещё и анализировать строку, что в восторг не приводит. Что же, есть и другой способ — использовать DirectoryListing. Однако, отладчик показывает, что этот массив не заполняется. ListResult заполняется, а DirectoryListing — нет. В хелпе указано, что:
DirectoryListing is a read-only TIdFTPListItems property that implements a container for TIdFTPListItem instances created from the result values for the List or Status methods. Авторский перевод — пока не используете List() или Status(), DirectoryList не заполнится. Но дело в том, что функция List() вызывается, а от этого список все равно не заполняется. Тогда возвращаемся к ListResult, просто надо написать обработчик строки.
Однако, не все так просто. Как видно выше, на каком-то сервере файл характеризуется строкой вида
-rw-r--r-- 1 2143 600 6590 May 26 19:59 .htaccess
, а вот на другом сервере зато строка немного отличается:
-rw-r--r-- 1 1595 600 13550 Nov 15 2009 .htaccess
То есть форматы дат разные, на одном время, на другом — год((.
Вопросы следующие :
1) что сделать, чтобы работал DirectoryListing компоненты TIdFTP?
2) почему с разных (да даже и с одного) серверов разные файлы характеризуются разным форматом веремени? (в документации объяснения не нашел, может, плохо искал)? есть ли ещё какие-нибудь подводные камни при работе с серверами FTP?
3) если знаете, порекомендуйте нормальную проверенную компоненту для работы с FTP.