none
Как обработать "TimeOut"? RRS feed

  • Вопрос

  • У меня вопрос. Как можно обработать исключение "TimeOut" и продолжить выполнение программы или повторить действие?

    Public Sub downloadFile(ByVal Uri As String, ByVal ToDownLoadFileName As String, ByVal LocalPath As String, Optional ByVal LocalFileName As String = "", Optional ByVal FTPUserID As String = "", Optional ByVal FTPPassword As String = "", Optional ByVal CountDownloadFile As Integer = 1, Optional ByVal ThisDownloadFile As Integer = 1)
            Dim result As StringBuilder = New StringBuilder()
            Dim reqFTP As FtpWebRequest = Nothing
            Dim response As FtpWebResponse = Nothing
            Dim reader As StreamReader = Nothing
    
            Dim ftpStream As Stream = Nothing
            Dim outputStream As FileStream = Nothing
    
            If FTPUserID = "" Then
                FTPUserID = Me.UserID
            End If
    
            If FTPPassword = "" Then
                FTPPassword = Me.Password
            End If
    
            If LocalFileName = "" Then
                LocalFileName = ToDownLoadFileName
            End If
    
            Try
    
                outputStream = New FileStream(LocalPath + "\\" + LocalFileName, FileMode.Create)
                reqFTP = CType(FtpWebRequest.Create(Uri + "/" + ToDownLoadFileName), FtpWebRequest)
                reqFTP.ConnectionGroupName = "MyGroup"
                reqFTP.UsePassive = True
                reqFTP.UseBinary = True
           
                reqFTP.Credentials = New NetworkCredential(FTPUserID, FTPPassword)
    
                reqFTP.Method = WebRequestMethods.Ftp.DownloadFile
    
                response = CType(reqFTP.GetResponse(), FtpWebResponse)
                ftpStream = response.GetResponseStream()
    
                Dim cl As Long = response.ContentLength
                DownloadFileSize = response.ContentLength
                Dim bufferSize As Integer = 2048
    
                Dim readCount As Integer
                Dim buffer(bufferSize) As Byte
                readCount = ftpStream.Read(buffer, 0, bufferSize)
    
                While readCount > 0
                    outputStream.Write(buffer, 0, readCount)
                    readCount = ftpStream.Read(buffer, 0, bufferSize)
                    Application.DoEvents()
                    Dim o As New FileInfo(LocalPath + "\\" + LocalFileName)
                    Main.Text = DownloadFileSize / 1024 & " = " & o.Length / 1024 & "   " & "Скачано файлов: " & ThisDownloadFile & " из " & CountDownloadFile
                    DownloadSize = o.Length
                End While
    
            Finally
                ftpStream.Close()
                outputStream.Close()
                response.Close()
            End Try
        End Sub
    Ошибка появляется на этой строке: "response = CType(reqFTP.GetResponse(), FtpWebResponse)". Подскажите пожалуйста, а то из-за этого все программа зависает, и ничего сделать не получается.

    19 февраля 2013 г. 6:33

Ответы

  • Добрый день.

    Оборачиваете всю конструкцию в цикл while. Объявляете перед циклом переменную, которой присваиваете значение, чтобы у вас произошел заход в цикл. После строки отвечающей за скачивание, меняете значение переменной на противоположное. Соотвественно, если произойдет ошибка скачивания, цикл выполниться еще раз и опять будет попытка скачать файл. Я бы еще добавил переменную, которая бы считала количество попыток, и, например, при пяти, заканчивала цикл и сообщал бы о том, что скачивание не удалось.

    P.s. Код на VB не напишу, ибо не знаю. Если алгоритм не понятен, то вам тогда и код помогут написать...

    • Помечено в качестве ответа DrKillJoy1 21 февраля 2013 г. 4:14
    19 февраля 2013 г. 6:58
    Отвечающий

Все ответы

  • Добрый день.

    Оборачиваете всю конструкцию в цикл while. Объявляете перед циклом переменную, которой присваиваете значение, чтобы у вас произошел заход в цикл. После строки отвечающей за скачивание, меняете значение переменной на противоположное. Соотвественно, если произойдет ошибка скачивания, цикл выполниться еще раз и опять будет попытка скачать файл. Я бы еще добавил переменную, которая бы считала количество попыток, и, например, при пяти, заканчивала цикл и сообщал бы о том, что скачивание не удалось.

    P.s. Код на VB не напишу, ибо не знаю. Если алгоритм не понятен, то вам тогда и код помогут написать...

    • Помечено в качестве ответа DrKillJoy1 21 февраля 2013 г. 4:14
    19 февраля 2013 г. 6:58
    Отвечающий
  • Спасибо, что не забыли отметить ответ

    Для связи [mail]

    21 февраля 2013 г. 7:10
    Модератор