![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Indy и докачка файлов через IdFTP [D7, WinXP]
lunev_denis © (2009-09-05 16:45:00)на форме есть компонент 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 - я так понял, что именно он отвечает за закачку - то возникает исключение.
Как всё-таки сделать правильно
Сергей М. (2009-09-07 12:35:00) [1]Чтобы его не было, следует перехватить и обработать исключение там, где оно возникает. А возникнуть оно у тебя может везде, где где ты обращаешься к объекту IdFTP, кроме собственно вызова метода Get.
denis_lunev (2009-09-07 12:27:00) [2]Да. так примерно я и делаю, но помимо этого сообщения - появляется еще одно. "Socket Error #10054". Connection reset by peer. Как сделать, чтоб этого сообщения небыло?
Сергей М. (2009-09-07 11:58:00) [3]try
..
except
ShowMessage('ошибка и все. Никаких исключений. Типа. "Произошла ошибка соединения."')
end;
denis_lunev (2009-09-07 11:06:00) [4]Вот спасибо.
А если не закрывалась, а просто сообщалось пользователю, что ошибка и все. Никаких исключений.
Типа. "Произошла ошибка соединения."
Сергей М. (2009-09-07 11:02:00) [5]Ясно.
> чтоб ничего не показивалось, а программа тихо, мирно закрывалась
try
..
except
Application.Terminate;
end;
denis_lunev (2009-09-07 10:58:00) [6]так я просто ручками отключаю соединение в момент скачки или докачки.
Сергей М. (2009-09-07 10:52:00) [7]
> допустим разрываю соединение с интернет
> делаю так
И где же здесь фигурирует разрыв соединения с интернет ?
denis_lunev (2009-09-07 10:42:00) [8]Тут я разобрался. Сам невнимательно делал.
Надо было так:
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;
Сергей М. (2009-09-06 17:04:00) [9]
> возникает исключение
Секретное ?