-
на форме есть компонент IdFTP. При попытке загрузки файлов с сервера FTP - всё работает отлично и прекрасно. Но, когда я принудительно отключаю соединение с интернетом, то происходи ошибка. Это и логично. Так вот, собственно вопрос. Как мне отловить эту ошибку и сделать так, чтобы файлы докачивались, а не скачивались по новой??? Заранее благодарен. Вот код загрузки: //*******************************// TRY If IdFTP1.Connected Then Begin IdFTP1.Disconnect; End; IdFTP1.Host:=FTP_Host; IdFTP1.Port:=FTP_Port; IdFTP1.Username:=FTP_Login; IdFTP1.Password:=FTP_Password; IdFTP1.Connect; If IdFTP1.Connected then //переходим в каталог закачки IdFTP1.ChangeDir(FTP_Katalog); //выводим список файлов Spisok:=TStringList.Create(); IdFTP1.List(Spisok,'*.*',False); //читаем список файлов
If Spisok.Count>0 Then Begin For i:=0 To Spisok.Count-1 Do Begin IF IdFTP1.Size(Spisok.Strings)<>-1 THEN BEGIN Application.ProcessMessages; //смотрим размер текущего файла Label1.Caption:='Скачивается файл № '+IntToStr(i+1)+' из '+IntToStr(Spisok.Count)+ ' Имя файла: '+Spisok.Strings+' Размером: '+IntToStr(IdFTP1.Size(Spisok.Strings))+ ' Кбайт.'; Application.ProcessMessages; //настраиваем полосу индикации Gauge1.Progress:=0; Gauge1.MinValue:=0; Gauge1.MaxValue:=IdFTP1.Size(Spisok.Strings); //скачиваем файл отмечая прогресс //причем прогресс отмечается в событии Work //компонента IdFTP1 IdFTP1.Get(Spisok.Strings,KatalogUser+Spisok.Strings,True); END; End; //*******************************// сразу же оговорюсь. когда я делаю метод IdFTP1.Get(Spisok.Strings,KatalogUser+Spisok.Strings,True); и при этом делаю параметр 3 (True) в значение False (типа не заменять файлы) и добавляю червертый параметр - значение True - я так понял, что именно он отвечает за закачку - то возникает исключение. Как всё-таки сделать правильно
-
> возникает исключение
Секретное ?
-
Тут я разобрался. Сам невнимательно делал. Надо было так: IdFTP1.Get(Spisok.Strings,KatalogUser+Spisok.Strings[i],True); - если скачиваем весь файл и IdFTP1.Get(Spisok.Strings,KatalogUser+Spisok.Strings[i],False,True); - это если докачиваем файл И всё окей.
Теперь следующая проблема. Я скачиваю фай и, допустим разрываю соединение с интернет. Сразу же выдается ошибка. Типа ошибка сокета. Как сделать так, чтоб ничего не показивалось, а программа тихо, мирно закрывалась? вот я делаю так Try IdFTP1.Get(Spisok.Strings[i],Spisok.Strings[i],False,True);//докачиваю файл Except //наверное здесь надо обработать ошибку соединения???? Как?? End;
-
> допустим разрываю соединение с интернет
> делаю так
И где же здесь фигурирует разрыв соединения с интернет ?
-
так я просто ручками отключаю соединение в момент скачки или докачки.
-
Ясно.
> чтоб ничего не показивалось, а программа тихо, мирно закрывалась
try .. except Application.Terminate; end;
-
Вот спасибо. А если не закрывалась, а просто сообщалось пользователю, что ошибка и все. Никаких исключений. Типа. "Произошла ошибка соединения."
-
try .. except ShowMessage('ошибка и все. Никаких исключений. Типа. "Произошла ошибка соединения."') end;
-
Да. так примерно я и делаю, но помимо этого сообщения - появляется еще одно. "Socket Error #10054". Connection reset by peer. Как сделать, чтоб этого сообщения небыло?
-
Чтобы его не было, следует перехватить и обработать исключение там, где оно возникает. А возникнуть оно у тебя может везде, где где ты обращаешься к объекту IdFTP, кроме собственно вызова метода Get.
|