Конференция "Сети" » Indy и докачка файлов через IdFTP [D7, WinXP]
 
  • lunev_denis (05.09.09 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 - я так понял, что именно он отвечает за закачку - то возникает исключение.
    Как всё-таки сделать правильно
  • Сергей М. © (06.09.09 17:04) [1]

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


    Секретное ?
  • denis_lunev © (07.09.09 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;
  • Сергей М. © (07.09.09 10:52) [3]

    > допустим разрываю соединение с интернет


    > делаю так


    И где же здесь фигурирует разрыв соединения с интернет ?
  • denis_lunev © (07.09.09 10:58) [4]
    так я просто ручками отключаю соединение в момент скачки или докачки.
  • Сергей М. © (07.09.09 11:02) [5]
    Ясно.

    > чтоб ничего не показивалось, а программа тихо, мирно закрывалась


    try
    ..
    except
     Application.Terminate;
    end;
  • denis_lunev © (07.09.09 11:06) [6]
    Вот спасибо.
    А если не закрывалась, а просто сообщалось пользователю, что ошибка и все. Никаких исключений.
    Типа. "Произошла ошибка соединения."
  • Сергей М. © (07.09.09 11:58) [7]
    try
    ..
    except
     ShowMessage('ошибка и все. Никаких исключений. Типа. "Произошла ошибка соединения."')
    end;
  • denis_lunev © (07.09.09 12:27) [8]
    Да. так примерно я и делаю, но помимо этого сообщения - появляется еще одно. "Socket Error #10054". Connection reset by peer. Как сделать, чтоб этого сообщения небыло?
  • Сергей М. © (07.09.09 12:35) [9]
    Чтобы его не было, следует перехватить и обработать исключение там, где оно возникает. А возникнуть оно у тебя может везде, где где ты обращаешься к объекту IdFTP, кроме собственно вызова метода Get.
 
Конференция "Сети" » Indy и докачка файлов через IdFTP [D7, WinXP]
Есть новые Нет новых   [134437   +30][b:0][p:0]