Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.02.26;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
15-1320352202
Юрий
2011-11-03 23:30
2012.02.26
С днем рождения ! 4 ноября 2011 пятница


6-1252430444
efim
2009-09-08 21:20
2012.02.26
WinPCap


15-1320599461
KilkennyCat
2011-11-06 20:11
2012.02.26
Как пользоваться дебаггером


2-1321257874
igorium
2011-11-14 12:04
2012.02.26
Загрузка в динамический Image часть изображения из файла


15-1320492248
alexdn
2011-11-05 14:24
2012.02.26
Компонент для XE2