Avatar billede dehaas Nybegynder
28. januar 2005 - 14:27 Der er 13 kommentarer og
1 løsning

Læse, hente og uoloade til ftp

Hej,

Jeg er igang med at lave et program til at ændre i et par filer til min FTP.

Hvordan læser jeg fra min FTP, altså fx. finder ud af hvilke filer der ligger.

Hvordan ehnte jeg filer fra min ftp?

Og hvordan uploader jeg filer til min FTP?
Avatar billede arne_v Ekspert
28. januar 2005 - 14:35 #1
.NET 1.1 har ikke indbygget support for FTP.

Du skal have fat på et lib.
Avatar billede arne_v Ekspert
28. januar 2005 - 14:36 #2
Jeg lavede det her til et andet spørgsmål:

Imports System
Imports System.IO
Imports System.Text
Imports System.Net.Sockets
Imports System.Threading

Public Class FtpClient
    Private ctrl As TcpClient
    Private ctrlstm As NetworkStream
    Private data As TcpClient
    Private datastm As NetworkStream

    Private Shared Sub Send(ByVal stm As NetworkStream, ByVal line As String)
        Dim b As Byte() = Encoding.Default.GetBytes(line)
        stm.Write(b, 0, b.Length)
    End Sub

    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
        Return Encoding.Default.GetString(b, 0, ix)
    End Function

    Public Shared Function Command(ByVal stm As NetworkStream, ByVal cmd As String) As String
        Send(stm, cmd + Convert.ToChar(13) + Convert.ToChar(10))
        Thread.Sleep(50)
        Return Receive(stm)
    End Function

    Private Sub SetupData()
        Dim dataaddr As String = Command(ctrlstm, "PASV")
        Dim addrparts As String() = dataaddr.Split("()".ToCharArray)(1).Split(",".ToCharArray)
        Dim datahost As String = addrparts(0) + "." + addrparts(1) + "." + addrparts(2) + "." + addrparts(3)
        Dim dataport As Integer = Integer.Parse(addrparts(4)) * 256 + Integer.Parse(addrparts(5))
        data = New TcpClient (datahost, dataport)
        datastm = data.GetStream
    End Sub

    Public Sub New(ByVal host As String, ByVal username As String, ByVal password As String)
        ctrl = New TcpClient (host, 21)
        ctrlstm = ctrl.GetStream
        Command(ctrlstm, "USER " + username)
        Command(ctrlstm, "PASS " + password)
    End Sub

    Public Function Dir() As String
        SetupData
        Command(ctrlstm, "LIST")
        Dim res As String = Receive(datastm)
        Receive(ctrlstm)
        datastm.Close
        data.Close
        Return res
    End Function

    Public Function ShortDir() As String
        SetupData
        Command(ctrlstm, "NLST")
        Dim res As String = Receive(datastm)
        Receive(ctrlstm)
        datastm.Close
        data.Close
        Return res
    End Function

    Public Sub MkDir(ByVal dir As String)
        Command(ctrlstm, "MKD " + dir)
    End Sub

    Public Sub RmDir(ByVal dir As String)
        Command(ctrlstm, "RMD " + dir)
    End Sub

    Public Sub ChDir(ByVal dir As String)
        Command(ctrlstm, "CWD " + dir)
    End Sub

    Public Sub UpLoad(ByVal filename As String, ByVal binary As Boolean)
        If binary Then
            Command(ctrlstm, "TYPE I")
        Else
            Command(ctrlstm, "TYPE A")
        End If
        SetupData
        Command(ctrlstm, "STOR " + filename)
        Receive(ctrlstm)
        Dim f As FileStream = New FileStream (filename, FileMode.Open)
        Dim b(100000 - 1) As Byte
        Dim ix As Integer = 0
        Dim n As Integer
        While ix < f.Length
            n = f.Read(b, 0, b.Length)
            datastm.Write(b, 0, n)
            Thread.Sleep(100)
            ix += n
        End While
        f.Close
        datastm.Close
        data.Close
    End Sub

    Public Sub DownLoad(ByVal filename As String, ByVal binary As Boolean)
        If binary Then
            Command(ctrlstm, "TYPE I")
        Else
            Command(ctrlstm, "TYPE A")
        End If
        SetupData
        Command(ctrlstm, "RETR " + filename)
        Receive(ctrlstm)
        Dim f As FileStream = New FileStream (filename, FileMode.Create)
        Dim b(100000 - 1) As Byte
        Dim n As Integer
        While datastm.DataAvailable
            n = datastm.Read(b, 0, b.Length)
            f.Write(b, 0, n)
            Thread.Sleep(100)
        End While
        f.Close
        datastm.Close
        data.Close
    End Sub

    Public Sub Logout()
        Command(ctrlstm, "QUIT")
        ctrlstm.Close
        ctrl.Close
    End Sub
End Class

Class TestClass
    Public Shared Sub Main(ByVal args As String())
        Dim cli As FtpClient = New FtpClient ("localhost", "anonymous", "arne@")
        Console.WriteLine(cli.ShortDir)
        Console.WriteLine(cli.Dir)
        Directory.SetCurrentDirectory("C:\")
        cli.DownLoad("z.zip", True)
        cli.MkDir("subdir")
        cli.ChDir("subdir")
        cli.UpLoad("z.zip", True)
        cli.Logout
    End Sub
End Class
Avatar billede dehaas Nybegynder
28. januar 2005 - 14:38 #3
Hmm synes det sear lidt uoverskueligt ud. Kan jeg få dig til at sende "projektet" til min i en zip-fil til admin@de-haas.dk
Avatar billede dehaas Nybegynder
28. januar 2005 - 15:30 #4
Hmm, fandt det her hos microsoft, man det hjælpe mig ikke så megt, måske nogen kan bruge det, til at hjælpe mig ?

http://support.microsoft.com/kb/832679/EN-US/
Avatar billede arne_v Ekspert
28. januar 2005 - 15:54 #5
Hvad skal jeg sende dig ?

Det er bare den ene fil.

(jeg bruger ikke engang Visual Studio)
Avatar billede dehaas Nybegynder
28. januar 2005 - 16:51 #6
Vil helst have det som et "projekt", lavet i visual studio. Hvis du forstå hvad jeg mener?

Projekt-fil, .vbproj, .vb, .resx o.æs.v, hva du nu ellers er.
Avatar billede arne_v Ekspert
28. januar 2005 - 20:25 #7
Jeg bruger ikke Visual Studio.

Men er det svært at lave et nyt projekt, vælge console app og copy paste
ovenstående kode ind ?
Avatar billede arne_v Ekspert
25. februar 2005 - 21:11 #8
??
Avatar billede dehaas Nybegynder
06. marts 2005 - 17:15 #9
Kan ikke lige få det til at virke, men tak for hjælpen. Siden du ikke har lagt et svar, vælger jeg at lukke spørgsmålet.
Avatar billede arne_v Ekspert
06. marts 2005 - 17:17 #10
Du har accpteret dit eget svar så det kan jeg ikke
Avatar billede arne_v Ekspert
06. marts 2005 - 17:19 #11
Og jeg ville ikke ligge et svar førend jeg havde indtryk af at det virkede
Avatar billede dehaas Nybegynder
06. marts 2005 - 18:22 #12
Det må du meget undskylde. Er der nogen måde hvorpå jeg kan gide vid mine point?
Avatar billede arne_v Ekspert
06. marts 2005 - 18:30 #13
Så skulle du oprette et nyt spørgsmål til det.

Men jeg har jo ikke krav på nogen point, da du ikke fik det til at virke.

Nogen giver point for indsatsen men det er optional ikke mandatory.

Jeg synes at vi bare skal betragte dette sppørgsmål som afsluttet.

Jeg har fået point af dig i andre spørgsmål, så jeg ved at du ikke
er typen som normalt tager point selv.

Jeg satser på at jeg kan tjene nogle af dine point ved en anden
lejlighed.
Avatar billede dehaas Nybegynder
06. marts 2005 - 18:35 #14
Ja okay, så siger vi det. Så må jeg jo bare give dig lidt ekstra næste gang. Synes helt klart du skulle have point for insatsen. Du er altid klart til at give en hånd med :D Tak skal du have.
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