FreeBasic
Главная
Вход
Регистрация
Пятница, 29.03.2024, 16:26Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Библиотеки для FreeBasic » Библиотека Window9 для Freebasic » Работа с ftp (функция FtpFileOpen (нужен параметр для кодировки))
Работа с ftp
Alex_ArtifexДата: Суббота, 29.01.2022, 20:27 | Сообщение # 1
Сержант
Группа: Пользователи
Сообщений: 22
Репутация: 0
Статус: Offline
Привет. Библиотека - отличная! Я уже ее пробовал раньше.
Теперь понадобились функции для работы с ftp.
Протестировал несколько функций. В целом работают хорошо, но выявилась проблема. Когда я закачиваю текстовый файл на ftp-сервер, то при открытии на нем (или когда обратно скачиваю его себе на комп и открываю) он открывается пустым или с кракозябрами. Я предполагаю, что это из-за того, что на сервере он создается с кодировкой "ascii" (по умолчанию) как в функции ФБ "open", я это проверил в Notepad++. А мне нужна кодировка "utf-8". Есть ли возможность добавить в эту функцию (FtpFileOpen) параметр для изменения кодировки?

Еще: если я сначала напр Filezillo-й отправил на сервер файл в кодировке ftp, то он туду так и сохраняется.


Сообщение отредактировал Alex_Artifex - Суббота, 29.01.2022, 21:15
 
haavДата: Суббота, 29.01.2022, 21:33 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Алекс, я писал эти функции (на самом деле это просто обертки) в то время , когда протокол FTP был еще востребованным. На сегодняшний день подавляющее большинство серверов перешли на FTPS или SFTP. ФТПшные функции winapi не поддерживают протоколы SFTP и FTPS. Так что эти функции по большому счету являются устаревшими. Нет смысла колупать то , что почти умерло. В твоем случае я думаю , что ты используешь функции с флагом FTP_TRANSFER_TYPE_ASCII . Попробуй работать с флагом FTP_TRANSFER_TYPE_BINARY , это по сути бинарный формат , где кодировка не должна иметь значения. Вообще для работы с сетью лучше использовать что-то заточенное под это , например библиотеку CURL.

Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
Alex_ArtifexДата: Суббота, 29.01.2022, 22:22 | Сообщение # 3
Сержант
Группа: Пользователи
Сообщений: 22
Репутация: 0
Статус: Offline
Понятно. Хорошо, спасибо за ответ.

Добавлено (30.01.2022, 12:58)
---------------------------------------------
Я выяснил в чем была проблема. Текстовые файлы для ftp протоколов должны быть в ASCII. А я ставил либы Window9 из папки UNICODE. Вернее сначала ставил ASCII и все работало, а потом UNICODE и поэтому перестало работать, а я это не сразу понял, а теперь точно знаю.

Насчет устревания ftp. Он еще будет долго устаревать наверное, как windows 7. Его "устаревание" связывают с отсутствием безопасности (которое добавили в новые ftp протоколы FTPS или SFTP). Но многие пользователи, даже предприятия не спешат переходить на новые протоколы. Хотя браузеры один за другим перестают поддерживать этот протокол, никому не мешает использовать его и дальше, если нет необходимости в безопасности.

Я лично пока и дальше буду использовать обычный ftp, мне не нужна безопасность, учитывая, что я использую Фрибейсик для развлечения, а не для работы..
Стас, еще раз спасибо за Window9, просьба пока не убирай ftp функции из нее.

 
haavДата: Воскресенье, 30.01.2022, 16:32 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата Alex_Artifex ()
просьба пока не убирай ftp функции из нее.


Я и не собирался , по крайней мере пока их основа (функции winapi) от микрософт еще предоставляются. Просто я не считаю нужным их обновлять.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
Alex_ArtifexДата: Вторник, 01.02.2022, 18:27 | Сообщение # 5
Сержант
Группа: Пользователи
Сообщений: 22
Репутация: 0
Статус: Offline
Еще вопрос по ftp: есть функция FtpWriteFile. Противоположной ей функции типа FtpReadFile - нет. Может она где-то в исходниках есть, просто не реализована? Если ее нет, может быть на основе исходника функции FtpWriteFile можно написать и FtpReadFile?
 
haavДата: Вторник, 01.02.2022, 20:45 | Сообщение # 6
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Средствами библиотеки можно прочитать данные из файла на ftp сервере 2-мя способами:

1) FtpFileGet (пример есть в справке) + Read_File с последующим удалением скачанного файла

2) Используя InetReadFile , просто адрес указываешь ftp-шный , что-то вроде "ftp://anonymous@ftp.blabla.ru/file.txt"

В принципе я думаю можно приспособить и 3 способ. Ведь функция InetReadFile по сути является обратной по отношению к FtpWriteFile. У меня просто нет возможности проверить. Попробуй сам , у тебя же есть ftp с правами доступа?


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
haavДата: Среда, 02.02.2022, 14:29 | Сообщение # 7
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Нашел пароль к одному моему старому сайту , который имеет возможность подключения по ftp. Как я и ожидал InetReadFile нормально читает:

Код
#Include "window9.bi"

Dim As HINTERNET hOpen,hConnect,hFile
hOpen = InetOpen()
Dim As String*1024 sData
Dim As String sRet
Dim As Integer iBytes

hConnect = FtpConnect(hOpen,"ftp server","user","password",,INTERNET_FLAG_PASSIVE)

If hConnect<>0 Then
   hFile = FtpFileOpen(hConnect,"file for read" , , GENERIC_READ )
    Do
           
           iBytes = InetReadFile(hFile,Cast(zString Ptr,@sData),1024)
           if iBytes = 0 then exit do
           sRet &= Left(sData , iBytes)
    Loop
   FtpFileClose(hFile)
EndIf
? sRet
InetFreeHandle(hConnect)
InetFreeHandle(hOpen)


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
Alex_ArtifexДата: Среда, 02.02.2022, 18:21 | Сообщение # 8
Сержант
Группа: Пользователи
Сообщений: 22
Репутация: 0
Статус: Offline
Спасибо за ответ и за пример. Да, я видел эту функцию в справке по window9. И 2 функции для отправки/получения файлов тоже видел и даже протестировал. Попробую InetReadFile. Спасибо, что протестил и ее с ftp.
good

Добавлено (02.02.2022, 19:10)
---------------------------------------------
Протестировал. Все отлично работает!

 
Форум » Библиотеки для FreeBasic » Библиотека Window9 для Freebasic » Работа с ftp (функция FtpFileOpen (нужен параметр для кодировки))
  • Страница 1 из 1
  • 1
Поиск: