Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];

Вниз

FTP с помощью Indy   Найти похожие ветки 

 
Кукушечка   (2006-02-28 08:58) [0]

Делаю так, пытаясь закачать файл на FTP  с помощью Indy:
f.Connect();
while f.Size("D:\f1.7z") <> f.Size("./f1.7z") do
 begin
 f.Put("D:\f1.7z","./f1.7z",true);
 Application.ProcessMessages;
 label1.Caption := IntToStr(f.Size("./TO_Saveliev/f1.7z"));
 end;

при этом форма приложения зависает и ни что не рагирует. помогает только Ctrl+F2 в Delphi.

Что не так?
Помогите плиз.


 
Сергей М. ©   (2006-02-28 09:12) [1]


> форма приложения зависает и ни что не рагирует


Put() - блокирующий метод.

Операторы, следующие за Put(), получат управление лишь тогда, когда файл будет выгружен полностью либо в ходе выгрузки произойдет исключение.

Кстати, а зачем append-режим ?


 
Кукушечка   (2006-02-28 09:21) [2]


> Put() - блокирующий метод.
>
> Операторы, следующие за Put(), получат управление лишь тогда,
>  когда файл будет выгружен полностью либо в ходе выгрузки
> произойдет исключение.

Можно как-то подругому?
> Кстати, а зачем append-режим ?

Я так понимаю что это режим докачки файла... или я не прав?


 
Сергей М. ©   (2006-02-28 09:35) [3]


> Можно как-то подругому?


Нет, нельзя.

Но можно бросить на форму компонент TIdAntifreeze, при этом в ходе выгрузки форма сможет реагировать на действия пользователя.


> это режим докачки файла


Это не режим докачки.
В этом режиме выгружаемый файл будет дозаписан в конец указанного файла на FTP-ресурсе.


 
Кукушечка   (2006-02-28 09:36) [4]


> Это не режим докачки.
> В этом режиме выгружаемый файл будет дозаписан в конец указанного
> файла на FTP-ресурсе.


?
А как же режим докачки...


 
Кукушечка   (2006-02-28 09:49) [5]

После добавления  TIdAntifreeze стала появляться ошибка "You aren"t logged in."

???


 
clickmaker ©   (2006-02-28 09:50) [6]


> Кукушечка   (28.02.06 09:49) [5]

User и Password прописаны в Idftp?


 
Сергей М. ©   (2006-02-28 10:05) [7]

Используй Put(Stream, ...) вместо Put(File, ...)


 
Кукушечка   (2006-02-28 10:14) [8]


> > Кукушечка   (28.02.06 09:49) [5]
>
> User и Password прописаны в Idftp?

ессно... :)


 
clickmaker ©   (2006-02-28 10:31) [9]

еще Idftp.AutoLogin должно быть true, либо надо явно вызывать Login после Connect


 
Кукушечка   (2006-02-28 11:10) [10]


> еще Idftp.AutoLogin должно быть true, либо надо явно вызывать
> Login после Connect

У моего Idftp нет свойства AutoLogin, есть только Logon, но я это уже пробовал, непомогает. Выскакивает та жа ошибка  "You aren"t logged in.".

Это только тогда когда на форму кидаю TIdAntifreeze, без него все работает.


 
umbra ©   (2006-02-28 11:15) [11]

а какой тип исключения это сообщение выдает?


 
Кукушечка   (2006-02-28 12:33) [12]


> umbra ©   (28.02.06 11:15) [11]
>
> а какой тип исключения это сообщение выдает?

EIdProtocolReplyError
едрить его в качель...


 
Кукушечка   (2006-02-28 12:35) [13]


> Сергей М. ©   (28.02.06 10:05) [7]
>
> Используй Put(Stream, ...) вместо Put(File, ...)

а смысл, если до Put вообще не доходит?


 
umbra ©   (2006-02-28 12:43) [14]

так а метод Login после Connect пробовали вызывать? и убрать строку Application.ProcessMessages;?


 
Кукушечка   (2006-02-28 13:07) [15]

procedure TForm1.Button3Click(Sender: TObject);
begin
f.Host := "xxxxxxxxxxxxx.ru";
f.Username := "xxx";
f.Password := "xxx";
f.Connect();
f.Login;
if f.Connected then
while f.Size("D:\f1.7z") <> f.Size("./f1.7z") do
 begin
 f.Put("D:\f1.7z","./TO_Saveliev/f1.7z",true);
 end;
end;


Ошибка.


 
umbra ©   (2006-02-28 13:37) [16]

на какой строке ошибка?


 
Кукушечка   (2006-02-28 13:43) [17]

f.Login;


 
Сергей М. ©   (2006-02-28 13:51) [18]


> на какой строке ошибка?
> Кукушечка   (28.02.06 13:43) [17]
> f.Login;


Ну и чего ты хочешь ?

Ты не прошел авторизацию (неверный логин и/или пароль), до Get/Put же в этом ckexft - как до Китая раком.

Ищи причины отказа в авторизации твоего доступа к серверу, потом уже будут разговоры про всякие там Processmessages


 
umbra ©   (2006-02-28 13:53) [19]

как оказалось после прочтения справки, отдельно Login вызывать не нужно, он вызывается из Connect. Если его вызов убрать, что получится?


 
Кукушечка   (2006-02-28 14:06) [20]


> Ну и чего ты хочешь ?

Я хочу чтобы не было ошибки.
Читай [10].
Ошибка возникает только тогда когда на форму кидаю TIdAntifreeze, без него все работает и файл загружается!
Как только на форме появляется TIdAntifreeze начинает вылазить ошибка... И именно на строке f.Login;

Причем если TIdAntifreeze.Active := false, то все ок. НО, теряется весь смысл TIdAntifreeze - нет доступа к элементам формы, ситуация [1].


> umbra ©   (28.02.06 13:53) [19]

Хоть с Connect, хоть без него одно и тоже.....


 
umbra ©   (2006-02-28 14:09) [21]


> Причем если TIdAntifreeze.Active := false, то все ок.

так сделай его активным после коннекта.


 
Кукушечка   (2006-02-28 14:18) [22]


> umbra ©   (28.02.06 14:09) [21]
>
>
> > Причем если TIdAntifreeze.Active := false, то все ок.
>
> так сделай его активным после коннекта.

Даааааа....
EIdProtocolReplyError
Timeout (no new data for 900 seconds).


 
Сергей М. ©   (2006-02-28 14:21) [23]


> Кукушечка   (28.02.06 14:06) [20]


Действительно) .. см. umbra ©   (28.02.06 14:09) [21]  - вывод-то напрашивается сам собой !

На кр.случай брось свои эксперименты с компонентом в осн.код.потоке и вынеси всю работу с ним в дополнительный - тогда никакие "антифризы" тебе не нужны будут.


 
umbra ©   (2006-02-28 14:27) [24]

или попробуйте поиграть со свойствами TIdAntifreeze. сделайте больше IdleTimeout, выставьте ApplicationHasPrioryty в false. У Вас может быть медленное соединение, которое сервер закрывает, пока приложение обрабатывает сообщения для пользовательского интерфейса.


 
umbra ©   (2006-02-28 14:32) [25]


> Timeout (no new data for 900 seconds)

Вы что, ждали 15 минут? Если да, то закачался ли файл?


 
Кукушечка   (2006-02-28 14:44) [26]


> umbra ©   (28.02.06 14:32) [25]
>
>
> > Timeout (no new data for 900 seconds)
>
> Вы что, ждали 15 минут? Если да, то закачался ли файл?


Нет, оштбка происходит при компиляции....


 
Сергей М. ©   (2006-02-28 14:50) [27]


> оштбка происходит при компиляции


Что за бред ?

О каком коннекте ВООБЩЕ может идти речь в compile-time ?


 
umbra ©   (2006-02-28 14:52) [28]

похоже, Вы решили пошутить и поморочить голову тем, кто Вам отвечает.
EIdProtocolReplyError может появиться только при взаимодействии клиента с сервером, но никак не при компиляции.

веселитесь дальше...


 
Сергей М. ©   (2006-02-28 14:57) [29]


> Я хочу чтобы не было ошибки


Хочешь ? Это ж замечательно !
Бери букварь и разбирайся, чем отличается компиляция от выполнения.
А если знаешь в чем отличие,  то не морочь людям голову и излагай проблему "as is"


 
Кукушечка   (2006-02-28 15:14) [30]

Никому я нехочу морочить голову....
Просто сижу на работе и .....

Ну да... оговорился... конечно же не при компиляции, а при нажатии на Button3, т.е при попытке закачать файл.

И ошибка на строке
while ftp.Size("D:\f1.7z") <> ftp.Size("./f1.7z") do
И проходит не 15 мин, а несколько сек.

Если Вам нехочется, не надо мне отвечать.

>  и излагай проблему "as is"


Излагаю.

У меня на форме 2 кнопки: одна Upload вторая Disconnect, компонент TIdFTP и TIdAntiFreeze.

Код.

procedure TForm1.Button3Click(Sender: TObject);
begin
ftp.Host := "xxx.xxx.xxx.xxx";
ftp.Username := "xxx";
ftp.Password := "xxx";
ftp.Connect();
IdAntiFreeze1.Active := true;
if ftp.Connected then
while ftp.Size("D:\f1.7z") <> ftp.Size("./f1.7z") do
 begin
 ftp.Put("f1.7z","./f1.7z",true);
 end;
end;

Свойство IdAntiFreeze1.Activ := false по умолчанию.

При такой активации IdAntiFreeze1 := true выскакивает ошибка
Класс - EIdProtocolReplyError
текст - Timeout (no new data for 900 seconds).

Соответсвенно соединение закрывается и файл ессно не качается.

Если вообще не использовать IdAntiFreeze1 то файл качается, но главная форма ни на что не рагирует. Помогает только Ctrl+F2 в Delphi.

Вот и проблема as is


 
Сергей М. ©   (2006-02-28 15:17) [31]

Ты про try ..except  слышал что-нибудь ?


 
Кукушечка   (2006-02-28 15:28) [32]


> Сергей М. ©   (28.02.06 15:17) [31]
>
> Ты про try ..except  слышал что-нибудь ?

Ну словлю я это исключение, и что это мне даст?
Соединение то все равно прерывается...


 
Сергей М. ©   (2006-02-28 15:41) [33]


> Ну словлю я это исключение


Вот и "слови" для начала.
Будешь хотя бы знать, какой метод вызвал исключение - то ли  Connect, то ли другой .. Это ж ВАЖНО !


> Соединение то все равно прерывается


Антифриз здесь явно ни при чем.


 
umbra ©   (2006-02-28 15:41) [34]

тогда
а) проверьте, что возвращает ftp.Size("D:\f1.7z"). По-моему, этот метод не работает с локальными файлами, хотя точно не знаю;
б) при первой попытке закачать файл f1.7z на сервере его еще  нет, а Вы вызывая ftp.Put("f1.7z","./f1.7z",true); пытаетесь добавить содержимое файла к несуществующему файлу на сервере. поставьте false.
в) уберите цикл. он бесполезен в этом месте.


 
Кукушечка   (2006-02-28 16:02) [35]


> umbra ©   (28.02.06 15:41) [34]
>
> тогда
> а) проверьте, что возвращает ftp.Size("D:\f1.7z"). По-моему,
>  этот метод не работает с локальными файлами, хотя точно
> не знаю;
> б) при первой попытке закачать файл f1.7z на сервере его
> еще  нет, а Вы вызывая ftp.Put("f1.7z","./f1.7z",true);
> пытаетесь добавить содержимое файла к несуществующему файлу
> на сервере. поставьте false.
> в) уберите цикл. он бесполезен в этом месте.


Cделал так ка Вы говорили.
Exceptions не появляются, но антифриз не работает. Файл закачивается.
Форма умирает.
ftp.Size("D:\f1.7z") возвращает -1 следовательно я большой лопух...


 
umbra ©   (2006-02-28 16:30) [36]

Вы свойства антифриза меняли? если да, то поставьте те, что были по умолчанию. и если не секрет, что на форме должно происходит? и главная ли это форма?


 
Кукушечка   (2006-02-28 16:54) [37]


> umbra ©   (28.02.06 16:30) [36]
>
> Вы свойства антифриза меняли? если да, то поставьте те,
> что были по умолчанию. и если не секрет, что на форме должно
> происходит? и главная ли это форма?


Св-ва антифриза по умолчанию, ничего не меняется.
Форма главная, она же единственная.
что должно происходить, ну хотя-бы можно было нажать кнопку Disconnect.
Форма вичнет как при бесконечном цикле, или очень а ресурсоемких прилжениях. Невозможно сфокусироваться ни на кнопках, ни на TMemo ( в нем кстати выводится FTP-лог).



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.012 c
4-1135703481
oleggar
2005-12-27 20:11
2006.03.19
PID of process


2-1141044256
Param[...]
2006-02-27 15:44
2006.03.19
Добрый день. Никак не могу разобраться с параметрами


5-1127313019
Гость111
2005-09-21 18:30
2006.03.19
разница TStringGrid и TDrawGrid


2-1141049426
dera
2006-02-27 17:10
2006.03.19
как сделать?


1-1139514668
Yozch1
2006-02-09 22:51
2006.03.19
вызов процедуры из DLL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский