Как отделить файлы от папок? - PullRequest
1 голос
/ 05 января 2010

У меня простая проблема. Мое приложение (Delphi 2007 с Indy 9) подключается к FTP-серверу для получения списка файлов. (NLST, а не LIST) Затем я загружаю каждый файл отдельно для дальнейшей обработки.

К сожалению, администраторы FTP-сайта добавили подпапку в папку, где находятся файлы. Текущий код считает, что это файл, поэтому он пытается загрузить его. Это терпит неудачу, конечно. Прямо сейчас я решил эту проблему, проверив, успешно ли завершился процесс, и если нет, он добавит сообщение в журнал ошибок, но также продолжит обработку других файлов.

Но я хотел бы добавить код, который сначала проверит, является ли имя в списке файлов именем файла или именем. Какой самый простой способ сделать это?

Примечание : я не могу полагаться на метод LIST для возврата списка файлов с дополнительными атрибутами, поскольку я подключаюсь к нескольким FTP-серверам, которые могут определять свой собственный формат файла. Кроме того, парсинг такого списка не очень простая задача, даже если бы я мог определить, какой тип списка возвращает FTP-сервер. Что еще хуже, некоторые имена файлов являются просто числами без расширения, поэтому подстановочные знаки тоже не помогают.

1 Ответ

2 голосов
/ 06 января 2010

Команда NLST не предоставляет никаких подробностей об именах, которые она предоставляет, в зависимости от ее конструкции. Вы должны использовать команду LIST или MLSD / MLST, чтобы получить подробную информацию, чтобы вы могли различать различные типы элементов. Да, при использовании LIST существует много разных форматов, используемых онлайн, и вам придется обнаруживать и декодировать их вручную по мере необходимости (например, компонент TIdFTP в Indy 10 имеет несколько десятков анализаторов, дополненных именно для этой цели). Вот почему расширение MLST / MLST было изобретено. Он специально разработан, чтобы иметь унифицированный формат, который легко анализируется в коде без каких-либо догадок. Многие современные FTP-серверы поддерживают это расширение.

...