Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 25681
Рейтинг: 2087
#1: 2014-05-16 13:34:21 ЛС | профиль | цитата
В пакет добавлен набор компонентов для работы с FTP сервисами. Интерфес построен на использовании менеджеров, те есть один глобальный компонент и компоненты для различных действий
карма: 20

1
Голосовали:Konst
vip
#1.1контекстная реклама от партнеров
Ответов: 4341
Рейтинг: 677
#2: 2014-05-16 13:35:58 ЛС | профиль | цитата
Это вещь!!!
Только, как мне кажется, событие onError стоило бы добавить в каждый компонент, а не только в FTP_Client. Просто усложняется обработка ошибок (например, в случае ошибки повторить нужное действие).
карма: 25

0
Разработчик
Ответов: 25681
Рейтинг: 2087
#3: 2014-05-16 13:42:03 ЛС | профиль | цитата
Netspirit писал(а):
Только, как мне кажется, событие onError стоило бы добавить в каждый компонент

Можно попробовать сделать, но трансформировать ошибки сверху вниз не получится, только текущие можно сделать.

А ты сам пример смотрел, там FTP-коммандер реализован, можно попробовать компоненты на реальном сервисе
------------ Дoбавленo в 13.42:
Попробовал добавить только каждому, мне не понравилось. Надо по всей схеме собирать ошибки в одну кучу, или делать кучу обвески
карма: 20

0
Ответов: 4341
Рейтинг: 677
#4: 2014-05-16 13:46:17 ЛС | профиль | цитата
В каждом компоненте выдавать только те ошибки, которые происходят при выполнении его операций.
nesco писал(а):
Надо по всей схеме собирать ошибки в одну кучу
Я лично привык делать LineBreakEx с ошибки на блок отображения и всё... Кроме того, такая ситуация возникает только в одном классе программ - FTP-менеджерах, как в твоем примере, когда все ошибки нужно выдавать пользователю. Во всех остальных случаях, когда ошибки обрабатываются "тихо" внутри программы, это несущественно.
Ну, смотри сам. Когда наберется некоторое количество паттернов использования, можно будет дальше думать.

Точку onError все же нужно размещать после основных методов.

Пример пробовал на двух серверах - фантастика. Можно еще добавить в какой-нибудь компонент проверку на существование файла и получение атрибутов, как у FileSearch, но для указанного файла (чтобы не перечислять содержимое каталога для этого). Или добавить элемент FTP_FileAttributes...

Также в ReadWrite добавить режим докачки файла (ну и метод для установки текущей позиции чтения/записи - REST). Можно добавить свойство для записываемого файла на сервер - заменить/дописать.

карма: 25

0
Разработчик
Ответов: 25681
Рейтинг: 2087
#5: 2014-05-16 13:53:51 ЛС | профиль | цитата
Netspirit писал(а):
Пример пробовал на двух серверах - фантастика. Можно еще добавить в какой-нибудь компонент проверку на существование файла и получение атрибутов

Пробовал, такая чешуя получается, мама не горюй. Ты В Тотале пробовал посмотреть атрибуты для файлов на FTP-сервере

Netspirit писал(а):
акже в ReadWrite добавить режим докачки файла (ну и метод для установки текущей позиции чтения/записи - REST). Можно добавить свойство для записываемого файла на сервер - заменить/дописать.

А разве дозапись поддерживается для FTP-сессий стандартными средствами WinAPI
карма: 20

0
Ответов: 4341
Рейтинг: 677
#6: 2014-05-16 14:07:25 ЛС | профиль | цитата
Отдельных функций для этого нет. Просто перед началом цикла с InternetReadFile/InternetWriteFile выполняется функция FtpCommand (http://msdn.microsoft.com/en-us/library/windows/desktop/aa384133(v=vs.85).aspx) с командой "REST <позиция>"

Некоторые соображения по работе с потоками.
После использования функций NewReadFileStream/NewWriteFileStream нужно выполнять проверку

#pas
if st.Handle = INVALID_HANDLE_VALUE then
begin
// Сообщить об ошибке
st.Free;
Exit;
end;
Иначе может быть такая ситуация, что по каким либо причинам файл не может быть открыт (TStream при этом создается нормально), а ты всеравно будешь выполнять закачку.
Также st.Write возвращает количество записанных данных. Нужно проверять равно ли оно тому количеству, которое требовалось записать. Если нет - значит ошибка записи (например, закончилось место на диске или ещё что-то)
карма: 25

0
Разработчик
Ответов: 25681
Рейтинг: 2087
#7: 2014-05-16 14:09:43 ЛС | профиль | цитата
Netspirit писал(а):
Можно еще добавить в какой-нибудь компонент проверку на существование файла

Это же может делать FTPC_FileSearch, у него и событие есть специальное -- onNotFound. В FTP коммандере используется же поиск файла
карма: 20

0
Ответов: 4341
Рейтинг: 677
#8: 2014-05-16 14:11:38 ЛС | профиль | цитата
nesco писал(а):
такая чешуя получается, мама не горюй

FtpFindFirstFile+InternetCloseHandle без дальнейшего цикла с InternetFindNextFile.
карма: 25

0
Разработчик
Ответов: 25681
Рейтинг: 2087
#9: 2014-05-16 14:24:59 ЛС | профиль | цитата
Netspirit писал(а):
Отдельных функций для этого нет. Просто перед началом цикла с InternetReadFile/InternetWriteFile выполняется функция FtpCommand (http://msdn.microsoft.com/en-us/library/windows/desktop/aa384133(v=vs.85).aspx) с командой "REST <позиция>"

Тут пока я не представляю как сделать, а тем более проверить это в работе
------------ Дoбавленo в 14.24:
Netspirit писал(а):
без дальнейшего цикла с InternetFindNextFile

А причем тут дальнейший цикл, когда сами атрибуты получаются совсем непонятные Однофайловые операции можно же реализовать в FTPC_FileSearch, для чего ты думаешь там стоит точка Mask
карма: 20

0
Разработчик
Ответов: 4680
Рейтинг: 423
#10: 2014-05-16 18:10:38 ЛС | профиль | цитата
nesco писал(а):
Однофайловые операции можно же реализовать в FTPC_FileSearch, для чего ты думаешь там стоит точка Mask

Оно то можно, речь идет о юзабилити: при работе со своей машиной пользователь привыкнет использовать FileAttributes, а тут сразу и не догадается, что FTP_FileSearch надо использовать.
карма: 10
0
Ответов: 1268
Рейтинг: 28
#11: 2014-05-16 18:19:33 ЛС | профиль | цитата
установки прав для файлов не хватает а так норм, если делать нормальный FTP клиент то это будет вовсе не особо хороший клиент без установки прав (права лучше сделать через те самые цифорки, к примеру 7777 все права на файл)
карма: 2

0
Разработчик
Ответов: 25681
Рейтинг: 2087
#12: 2014-05-16 19:17:12 ЛС | профиль | цитата
Rysik писал(а):
то это будет вовсе не особо хороший клиент без установки прав

И какие команды FTP устанавливают права на файл
------------ Дoбавленo в 19.17:
Netspirit, я не нашел в описаниях команд FTP, команды "REST <позиция>". Но вот подумать над созданием компонента FTPC_Command надо бы подумать
карма: 20

0
Ответов: 1268
Рейтинг: 28
#13: 2014-05-16 21:01:55 ЛС | профиль | цитата
nesco писал(а):
Но вот подумать над созданием компонента FTPC_Command надо бы подумать


уже всё есть, осталось занести и подредактировать...
ну а в крацах это команда CHMOD

[flood]click to smail[/flood]
карма: 2

0
Ответов: 4341
Рейтинг: 677
#14: 2014-05-16 21:13:41 ЛС | профиль | цитата
nesco писал(а):
я не нашел в описаниях

http://www.rsdn.ru/forum/network/841847.all
Там есть проблема при использовании FtpOpenFile, потому что не получится вклинить "REST" перед "RETR". FtpOpenFile заменяется на последовательность FtpCommand с "TYPE I", "PASV", "REST", "RETR".
Я сделал рабочий вариант, оставил на работе. После выходных подправлю и покажу.
И ещё, в наших wininet.pas неправильное объявление FtpCommand - нужно добавить ещё один параметр.
карма: 25

0
Разработчик
Ответов: 25681
Рейтинг: 2087
#15: 2014-05-16 23:01:16 ЛС | профиль | цитата
Rysik писал(а):
уже всё есть, осталось занести и подредактировать...

Может где-то и есть, но у нас я пока не видел. Так что умничать я бы настоятельно советовал в другом месте, а у нас желательно пруфами делиться, между прочим, или советами, которые несут хоть какую-то полезную информацию.

Rysik писал(а):
ну а в крацах это команда CHMOD

Где пруф на описание этой команды
Где уверенность, что эта команда будет отработана любым сервером

Кстати, это в равной мере касается и команды REST. Поэтому, неплохо бы сначал получить набор поддерживаемых команд командой HELP, и проверить вхождение туда нестандартных команд
карма: 20

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)