Страница 1 из 1
Как получить все файлы с ftp?
Добавлено: 02 Ноябрь 2009, 10:56
alex789
Есть задача - необходимо получить список файлов, упрощенно скачать все файлы, которые есть в папке на ftp. Среда Clarion 6.3 стандартные шаблоны. Может есть какое внешнее бесплатное приложение, которое это может делать? Для работы с ftp пользуем ncftpget и ncftpput, но, кажется, эти проги не умеют давать список. В идеале хотелось-бы получить список файлов в txt-файл. Дальше его уже считаю и последовательно получу все файлы.
Re: Как получить все файлы с ftp?
Добавлено: 02 Ноябрь 2009, 11:02
Игорь Столяров
Мы для этих целей используем библиотеку Catalyst SocketTools (есть FTP форума).
В ней все это и многое другое по работе с FTP есть. Минус - это не бесплатная библиотека ...
Re: Как получить все файлы с ftp?
Добавлено: 02 Ноябрь 2009, 12:18
Admin
alex789 писал(а):Есть задача - необходимо получить список файлов, упрощенно скачать все файлы, которые есть в папке на ftp. Среда Clarion 6.3 стандартные шаблоны. Может есть какое внешнее бесплатное приложение, которое это может делать? Для работы с ftp пользуем ncftpget и ncftpput, но, кажется, эти проги не умеют давать список. В идеале хотелось-бы получить список файлов в txt-файл. Дальше его уже считаю и последовательно получу все файлы.
Вот кто то из наших писал, по моему.
Ниже файл и пример как работать.
Код: Выделить всё
Msg('Подключение к ' & CLIP(GLO:Server))
IF NOT FTPClient.IsSession()
FTPClient.Init(GLO:Server)
EE# += 1; ?Progress{PROP:Progress} = EE#; DISPLAY(?Progress)
END
FTPClient.ShowErrors(FALSE)
IF CLIP(GLO:User) <> '' AND CLIP(GLO:Password) <> ''
Err# = FTPClient.SetServerUser(CLIP(GLO:User),CLIP(GLO:Password))
EE# += 1; ?Progress{PROP:Progress} = EE#; DISPLAY(?Progress)
DebugOut(Err# & ' SetServerUser')
IF Err# <> 0 THEN MESSAGE('Ошибка при подключении'); RETURN END
END
Err# = FTPClient.Connect()
DebugOut(Err# & ' Connect')
EE# += 1; ?Progress{PROP:Progress} = EE#; DISPLAY(?Progress)
IF Err# <> 0 THEN MESSAGE('Ошибка при подключении'); RETURN END
Msg('Получение списка каталогов')
Err# = FTPClient.GetDirectoryList(DirList)
DebugOut(Err# & ' GetDirectoryList 1')
EE# += 1; ?Progress{PROP:Progress} = EE#; DISPLAY(?Progress)
IF Err# <> ERROR_NO_MORE_FILES THEN MESSAGE('Ошибка при получении списка каталогов'); RETURN END
IF CLIP(GLO:FTPFolder) <> ''
Msg('Переход в ' & CLIP(GLO:FTPFolder))
Err# = FTPClient.ChangeDirectory(CLIP(GLO:FTPFolder))
DebugOut(Err# & ' ChangeDirectory')
EE# += 1; ?Progress{PROP:Progress} = EE#; DISPLAY(?Progress)
IF Err# <> 0 THEN MESSAGE('Ошибка при смене каталога'); RETURN END
Msg('Получение списка каталогов')
Err# = FTPClient.GetDirectoryList(DirList)
DebugOut(Err# & ' GetDirectoryList 2')
EE# += 1; ?Progress{PROP:Progress} = EE#; DISPLAY(?Progress)
IF Err# <> ERROR_NO_MORE_FILES THEN MESSAGE('Ошибка при получении списка каталогов'); RETURN END
END
LOOP W# = 1 TO RECORDS(UploadQuery)
GET(UploadQuery,W#)
Msg('Загружаем на сервер: ' & CLIP(UploadQuery.File))
Err# = FTPClient.Upload(CLIP(UploadQuery.FullFile),CLIP(UploadQuery.File))
EE# += 1; ?Progress{PROP:Progress} = EE#; DISPLAY(?Progress)
DebugOut(Err# & ' Upload ' & CLIP(UploadQuery.FullFile))
IF Err# <> 0 THEN MESSAGE('Ошибка при загрузке на сервер'); RETURN END
END
!Msg('Получение списка каталогов')
Err# = FTPClient.GetDirectoryList(DirList)
DebugOut(Err# & ' GetDirectoryList 3')
IF Err# <> ERROR_NO_MORE_FILES THEN MESSAGE('Ошибка при получении списка каталогов'); RETURN END
DebugOut('----------------')
LOOP W# = 1 TO RECORDS(DirList)
GET(DirList,W#)
DebugOut(CLIP(DirList.Name) & ' ' & DirList.FileSize & ' ' & FORMAT(DirList.fFileDate[2],@D6.) & ' ' & FORMAT(DirList.fFileTime[2],@T4))
END
DebugOut('----------------')
Err# = FTPClient.Disconnect(TRUE)
DebugOut(Err# & ' Disconnect')
EE# += 1; ?Progress{PROP:Progress} = EE#; DISPLAY(?Progress)
IF Err# <> 0 THEN MESSAGE('Ошибка при отключении'); RETURN END
FREE(DirList)
Re: Как получить все файлы с ftp?
Добавлено: 02 Ноябрь 2009, 12:19
Admin
alex789 писал(а):Есть задача
И еще просьба не дублить треды в разных подфорумах.