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.