DevTrain

Autor: Andreas Rauch

Automatisierter Upload per FTP

Haben Sie vielleicht vor einen Datenaustausch über eine kleine Anwendung automatisiert zu erledigen. In VB ist das einfacher als man denkt.

In unserem Beipsiel erledigen wir das mit dem Internet Transfer Control und einer kleinen XML Datei, damit wir die Einstellungen jederzeit aus einer Konfigurationsdatei laden und editieren können.

Das Ziel ist es z.B alle 15 Minuten von einem einem FTP Server Daten von einem besimmten Verzeichnis downzuloaden.

Zunächst die Konfigurationsdatei cfg.xml

<root>
 <server>ftp.dinsbums.de<server>
 <login>guest<login>
 <pass>guest<pass>
 <pfad>bizdata<pfad>
</root>

Unsere Anwendung liest also zunächst die XML Datei aus, verbindet sich mit dem FTP Server und lädt anschliessend Datei für Datei runter.

Wie gehts?

Wir bauen uns ein Standard.exe Projekt mit einem Formular auf dem wir unser Inet Control plazieren. Außerdem laden wir uns einen Verweis auf den XML Parser.

Und so gehts weiter...

Einlesen der Kofigurations Daten

    Set xmlDoc = New DOMDocument
    xmlDoc.async = False
    xmlDoc.Load App.Path & "cfg.xml"
  
    server = xmlDoc.selectSingleNode("//server").Text       ' FTP_Server
    login = xmlDoc.selectSingleNode("//login").Text         ' Benutzerkennung
    password = xmlDoc.selectSingleNode("//password").Text   ' Passwort
    ftppfad = xmlDoc.selectSingleNode("//pfad").Text       ' FTP-Pfad


Nun verbinden wir uns mit dem FTP Server. Übrigens...falls in der cfg.xml kein Verzeichnis angegeben wurde, dann wird das Stammverzeichnis des ftp-Servers benutzt.

On Error GoTo ConnectError
    Inet1.url = server
    Inet1.UserName = login
    Inet1.password = password
    Inet1.Protocol = icFTP
   
    iLastFTP = ftpDIR
     Inet1.Execute Inet1.url, "CD " & Chr(34) & pfad & Chr(34)

Wie sie sehen ist es wichtig zu wissen, daß das Inet Control event gesteuert ist. Daher lassen
wir eine kleine Schleife laufen.

Do
        DoEvents
    Loop Until Not Inet1.StillExecuting

    Nun listen wir das Verzeichnis auf.

Inet1.Execute Inet1.url, "DIR"

Und wieder die Schleife.

Do
        DoEvents
    Loop Until Not Inet1.StillExecuting

Nun brauchen wir noch eine Liste der Dateien auf dem FTP Server.

Dim sfileList As String
    Dim sTemp As String
    Dim p As Integer
    Dim xfiles As String
    mycount = 0
                
    sTemp = Inet1.GetChunk(1024)

    
'  Zusammenstellen der gefundenen Dateien in sfilelist

        Do While Len(sTemp) > 0
            DoEvents
            sfileList = sfileList & sTemp
            sTemp = Inet1.GetChunk(1024)
        Loop

'  Für jedes File in strfilelist ....

        Do While sfileList > ""
          DoEvents
          p = InStr(sfileList, vbCrLf)
          If p > 0 Then
            xfiles = Left(sfileList, p - 1)
                If Len(sfileList) > (p + 2) Then
                        sfileList = Mid(sfileList, p + 2)
                    Else
                        sfileList = ""
                End If
          Else
              xfiles = xfiles & sfileList
              sfileList = ""
          End If

Nun werden noch die Dateien geladen

Dim I As Integer
Dim sfileList As String

   
' Laden der Datei

    If Len(sfileList) > 0 Then
        sfileList = Left(sfileList, _
            Len(sfileList))
        GetFiles sfileList
    End If

Geholt werden die Datein mit der Funktion GetFiles, die ich hier nicht vorenthalten möchte.
Am komfortabelsten arbeiten sie mit dem Execute Befehl.

Dim sFile As String
    Dim sTemp As String
    Dim p As Integer
   
    iLastFTP = ftpGET
    sFile = sfileList
    dateiname = lokal & sFile   'Pfad und Dateiname  'lokal = Lokaler Ablageordner der   Datei

   ' Laden der Datei von FTP Server

Inet1.Execute Inet1.url, _
                    "GET" & " " & sFile & " " & dateiname

    Auch hier wieder eine kleine Schleife für unser event.

Do
        DoEvents
    Loop Until Not Inet1.StillExecuting

     
    So das wars. Nun müssen wir bloß noch einen Scheduler Dienst einrichten der unsere Anwendung beispw. alle 20 min startet.

Hinweis: Machen Sie sich mit den FTP Commands vertraut, dann können Sie mit dem execute Befehl so ziemlich alles erledigen was Sie wollen. (PUT, GET, DEL etc.)

Die Anwendung kann man natürlich noch ausbauen und mit einem Logfile versehen oder die empfangenen Daten in eine Daten laden.

 

Viel Spaß damit.


Erfasst am: 06.08.2001 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=511
© Copyright 2003 ppedv AG - http://www.ppedv.de