Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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]


> возникает исключение


Секретное ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо