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