Страница 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 писал(а):Есть задача
И еще просьба не дублить треды в разных подфорумах.