Работа с ftp
|
|
Alex_Artifex | Дата: Суббота, 29.01.2022, 20:27 | Сообщение # 1 |
Сержант
Группа: Пользователи
Сообщений: 22
Статус: 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 |
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Статус: 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
Статус: 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 |
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Статус: Offline
| Цитата Alex_Artifex ( ) просьба пока не убирай ftp функции из нее.
Я и не собирался , по крайней мере пока их основа (функции winapi) от микрософт еще предоставляются. Просто я не считаю нужным их обновлять.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
Alex_Artifex | Дата: Вторник, 01.02.2022, 18:27 | Сообщение # 5 |
Сержант
Группа: Пользователи
Сообщений: 22
Статус: Offline
| Еще вопрос по ftp: есть функция FtpWriteFile. Противоположной ей функции типа FtpReadFile - нет. Может она где-то в исходниках есть, просто не реализована? Если ее нет, может быть на основе исходника функции FtpWriteFile можно написать и FtpReadFile?
|
|
| |
haav | Дата: Вторник, 01.02.2022, 20:45 | Сообщение # 6 |
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Статус: 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 |
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Статус: 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
Статус: Offline
| Спасибо за ответ и за пример. Да, я видел эту функцию в справке по window9. И 2 функции для отправки/получения файлов тоже видел и даже протестировал. Попробую InetReadFile. Спасибо, что протестил и ее с ftp. Добавлено (02.02.2022, 19:10) --------------------------------------------- Протестировал. Все отлично работает!
|
|
| |