Avatar billede steensommer Praktikant
31. august 2016 - 10:42 Der er 3 kommentarer

Problem med Ftp download

Hej

Nedenstående kode anvendes til at downloade filer fra ftp server.
Filernes størrelse er imidlertid 0 kb så et eller andet er galt :-/


Dim reqFTP As FtpWebRequest = Nothing
        Dim ftpStream As Stream = Nothing
        Try
            Dim outputStream As New FileStream(filePath + "\" + fileName, FileMode.Create)
            reqFTP = DirectCast(FtpWebRequest.Create(New Uri("ftp://" + FTPSettings.IP + "/" + fileName)), FtpWebRequest)
            reqFTP.Method = WebRequestMethods.Ftp.DownloadFile
            reqFTP.UseBinary = True
            reqFTP.Credentials = New NetworkCredential(FTPSettings.UserID, FTPSettings.Password)
            Dim response As FtpWebResponse = DirectCast(reqFTP.GetResponse(), FtpWebResponse)
            ftpStream = response.GetResponseStream()
            Dim cl As Long = response.ContentLength
            Dim bufferSize As Integer = 2048
            Dim readCount As Integer
            Dim buffer As Byte() = New Byte(bufferSize - 1) {}

            readCount = ftpStream.Read(buffer, 0, bufferSize)
            While readCount > 0
                outputStream.Write(buffer, 0, readCount)
                readCount = ftpStream.Read(buffer, 0, bufferSize)
            End While

            ftpStream.Close()
            outputStream.Close()
            response.Close()
        Catch ex As Exception
            If ftpStream IsNot Nothing Then
                ftpStream.Close()
                ftpStream.Dispose()
            End If
            Throw New Exception(ex.Message.ToString())
        End Try
Avatar billede arne_v Ekspert
31. august 2016 - 13:26 #1
Umiddelbar ser koden OK ud.

Men har du proevet den simple version?

Dim wc As New WebClient()
wc.Credentials = cred
wc.DownloadFile(url, filename)
Avatar billede arne_v Ekspert
01. september 2016 - 03:04 #2
Dim cl As Long = response.ContentLength

kan du godt slette. Du bruger ikke cl variablen og derudover kan FTP ikke levere en paalidelig ContentLength.
Avatar billede steensommer Praktikant
01. september 2016 - 09:04 #3
Tak for dine input. Jeg kunne ikke få den simple variant til at virke men fik gennemgået en kode der lå et "andet sted" ...og den tømte filerne :-/

Det endte derfor med denne (kan den ændres så man ikke skal "logge på" 2 gange?)

Form1.ListBox1.Items.Clear()
        Dim arr() As String
        Dim output As IO.Stream
        Dim request As FtpWebRequest = WebRequest.Create("ftp://ftp.ftpserver.com/")
        request.Credentials = New NetworkCredential("bruger", "kode")
        request.Method = WebRequestMethods.Ftp.ListDirectory

        Dim response As FtpWebResponse = request.GetResponse()
        Dim responseStream As Stream = response.GetResponseStream()
        Dim reader As StreamReader = New StreamReader(responseStream)
        Dim lol As String

        Do
            lol = reader.ReadLine
            If Len(lol) < 1 Then Exit Do

            arr = Split(lol, vbNewLine)
            Dim i As Integer
            For i = 0 To UBound(arr)
                If Len(arr(i)) > 0 Then

                    request = DirectCast(System.Net.WebRequest.Create("ftp://ftp.ftpserver.com" & lol), System.Net.FtpWebRequest)
                    request.Credentials = New System.Net.NetworkCredential("bruger", "kode")
                    request.Method = System.Net.WebRequestMethods.Ftp.DownloadFile
                    request.Timeout = -1
                    Dim stream As System.IO.Stream = request.GetResponse.GetResponseStream
                    output = System.IO.File.Create("f:\FtpDownload\" & lol)
                    stream.CopyTo(output)

                    Form1.ListBox1.Items.Add(Path.GetFileName(lol))

                    output.Close()
                    stream.Close()

                End If
            Next
        Loop

        reader.Close()
        response.Close()
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester