Avatar billede armit Nybegynder
23. oktober 2007 - 02:07 Der er 6 kommentarer og
2 løsninger

arne_v ftp

Hej Arne

Har benyttet mig af din fornemme klasse, men har et lille problem hvor den fejler, håber du kan hjælpe mig, da jeg er kørt lidt fast.

Jeg har udarbejdet følgende Sub til klassen.

Public Sub UpLoadMask(ByVal mask As String, ByVal binary As Boolean, ByVal Path As String, ByVal ToPath As String)
        Dim sr As String
        Dim fileEntries As String() = Directory.GetFiles(Path)
        Dim fileName As String
        Dim fileName2 As String
        If ToPath <> "" Then
            ChDir(ToPath)
        End If
        For Each fileName In fileEntries
            If fileName.IndexOf(mask) <> -1 Then
                UpLoad(fileName, True)
                fileName = Replace(fileName, Path, "")
                sr = ShortDir()
                fileName2 = ""
                For Each f As String In sr
                    If f = vbCr Or f = vbLf Then
                        If fileName2 <> "" Then
                            If fileName2.IndexOf(mask) <> -1 Then
                                If fileName2 = fileName Then
                                    File.Delete(fileName2)
                                End If
                            End If
                            fileName2 = ""
                        End If
                    Else
                        fileName2 = fileName2 + f
                    End If
                Next
            End If
        Next fileName
    End Sub

Denne benyttes bla sådan:

UpLoadMask(".xml", True, PathSearch + "XML", "l2s")

Ved kald flere gange fejler den, det ser ud som om det er når der efter en Upload kaldes en eks. ShortDir().

Stedet hvor den fejler er :
Sub SetupData

Linie:
Dim addrparts As String() = dataaddr.Split("()".ToCharArray)(1).Split(",".ToCharArray)

Jeg har fundet frem til at det skyldes at :
Dim dataaddr As String = Command(ctrlstm, "PASV")
ikke altid retunere de fulde informationer men nogle gange mangler ip + div.

Håber du kan hjælpe.
Avatar billede arne_v Ekspert
23. oktober 2007 - 02:50 #1
Husk at du kan har brug for den klasse hvis du bruger .NET 1.1 eller fordi den indbyggede
FTP support i .NET 2.0+ er for ufleksibel.
Avatar billede arne_v Ekspert
23. oktober 2007 - 02:51 #2
Hvis du skal debugge en fejl så sæt noget udskriv kode ind:

    Private Shared Function Receive(ByVal stm As NetworkStream) As String
        Dim b(100000 - 1) As Byte
        Dim ix As Integer = 0
        Dim n As Integer
        While stm.DataAvailable
            n = stm.Read(b, ix, b.Length - ix)
            ix += n
        End While
        ' **** udskriv Encoding.Default.GetString(b, 0, ix) her ****
        Return Encoding.Default.GetString(b, 0, ix)
    End Function
Avatar billede arne_v Ekspert
23. oktober 2007 - 02:52 #3
Hvilken version har du ?

Jeg er ret sikker på at jeg har en ny og forbedret version (kun i C# men jeg kan nemt
konvertere til VB.NET).
Avatar billede armit Nybegynder
23. oktober 2007 - 09:22 #4
Hej Arne

Jeg benytter mig af 2005 v 2.0, har du evt. en stump kode der illustere den ftp klasse der skulle være i denne.

De eneste funktioner der mangler ifht. den du har udført er up og down af *.???, samt at der ved up og download slettes transporteret filer.
Avatar billede arne_v Ekspert
23. oktober 2007 - 15:15 #5
Her er et simpelt upload eksempel:

Imports System
Imports System.IO
Imports System.Net

Namespace E
    Class MainClass
        Public Shared Sub Upload(ByVal localfile As String, ByVal ftpurl As String, ByVal bin As Boolean)
            Dim req As FtpWebRequest = DirectCast(WebRequest.Create(ftpurl), FtpWebRequest)
            req.Method = WebRequestMethods.Ftp.UploadFile
            req.UseBinary = bin
            If bin Then
                Dim instm As Stream = New FileStream(localfile, FileMode.Open, FileAccess.Read)
                Dim outstm As Stream = req.GetRequestStream()
                Dim b As Byte() = New Byte(10000) {}
                Dim n As Integer
                n = instm.Read(b, 0, b.Length)
                While n > 0
                    outstm.Write(b, 0, n)
                    n = instm.Read(b, 0, b.Length)
                End While
                instm.Close()
                outstm.Close()
            Else
                Dim sr As StreamReader = New StreamReader(localfile)
                Dim sw As StreamWriter = New StreamWriter(req.GetRequestStream())
                Dim line As String
                line = sr.ReadLine()
                While line IsNot Nothing
                    sw.WriteLine(line)
                    line = sr.ReadLine()
                End While
                sr.Close()
                sw.Close()
            End If
            Dim resp As FtpWebResponse = DirectCast(req.GetResponse(), FtpWebResponse)
            Console.WriteLine(resp.StatusCode)
        End Sub
        Public Shared Sub Main(ByVal args As String())
            Upload("C:\X.java", "ftp://anonymous:xxxxxx@arnepc3/X.java", False)
            Upload("C:\X.class", "ftp://anonymous:xxxxxx@arnepc3/X.class", True)
        End Sub
    End Class
End Namespace
Avatar billede armit Nybegynder
30. oktober 2007 - 16:01 #6
Hej Arne

Jeg benyttede mig af http://www.codeproject.com/vb/net/FtpClient.asp istedet, virker stabilt og kan kun anbefales.

Smider du et svar så du kan få lidt for besværet.
Avatar billede arne_v Ekspert
30. oktober 2007 - 23:26 #7
ok
Avatar billede armit Nybegynder
30. oktober 2007 - 23:52 #8
Rest
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
Kategori
Kurser inden for grundlæggende programmering

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