(FTP ?) Dateidownlaod aus dem Internet

Hallo,

wer kann mir ein Beispielcode (möglichst einfach und verständlich, wenige code, umso weniger, umso besser) zeigen, mit dessen Hilfe ich mit VB 6 eine Datei aus dem Internet herunter laden kann auf dem lokalen Rechner.

Hier meine Wünsche;

Soll mit VB 6 Bordmitteln funktionieren.
Keine einbindung von OCX oder sowas.
Notfalls, aber nur wenns nicht anders geht, mit API Aufrufe.

Danke.
Jürgen

Hallo Jürgen,

http://www.activevb.de/tipps/vb6tipps/tipp0022.html

komplett mit VB6, ohne API und ohne zusätzliche OCX.

Gruß, Rainer

Hallo Rainer,

sei mir bitte nicht böse, ich meine es auch nicht böse, aber kann es sein, das du mich veräppeln willst ???

Ich habe doch extra geschrieben, OHNE OCX, und du schreibst extra noch dazu, das es OHNE OCX geht, tatsächlich ist das aber nicht der Fall.

Hast du dir den Tipp denn gar nicht richtig angesehen ???

Nichts für ungut.

Jürgen

-(
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Jürgen,

sei mir bitte nicht böse,

nein, warum sollte ich?

ich meine es auch nicht böse, aber
kann es sein, das du mich veräppeln willst ???

ein, auch nicht. :smile:

Ich habe doch extra geschrieben, OHNE OCX, und du schreibst
extra noch dazu, das es OHNE OCX geht, tatsächlich ist das
aber nicht der Fall.

Ohne zusätzliche, habe ich geschrieben. War normaler Weise bei VB dabei ist, verwende ich natürlich, das geht ja auch nicht anders, sonst hättest Du noch nicht mal einen Button.

Hast du dir den Tipp denn gar nicht richtig angesehen ???

Ja, klar. Das Wesentliche ist INet, gehört zum normalen Umfang von VB6 Pro und Enterprise.

Kann es sein, daß Du nur VB falsch startest (Standard exe erzeugen) und Deine Werkzeuge noch gar nicht gesehen hast? Du wärst nicht der Erste.

Oder möchtest Du es doch lieber mit API? Ganz ohne OCX funktioniert VB aber nicht, sogar die Form benötigt ein OCX.

Gruß, Rainer

FtpGetFile
Hallo Jürgen,

kurz noch ein Beispiel mit API:

Const FTP\_TRANSFER\_TYPE\_UNKNOWN = &H0
Const FTP\_TRANSFER\_TYPE\_ASCII = &H1
Const FTP\_TRANSFER\_TYPE\_BINARY = &H2
Const INTERNET\_DEFAULT\_FTP\_PORT = 21 ' default for FTP servers
Const INTERNET\_SERVICE\_FTP = 1
Const INTERNET\_FLAG\_PASSIVE = &H8000000 ' used for FTP connections
Const INTERNET\_OPEN\_TYPE\_PRECONFIG = 0 ' use registry configuration
Const INTERNET\_OPEN\_TYPE\_DIRECT = 1 ' direct to net
Const INTERNET\_OPEN\_TYPE\_PROXY = 3 ' via named proxy
Const INTERNET\_OPEN\_TYPE\_PRECONFIG\_WITH\_NO\_AUTOPROXY = 4 ' prevent using java/script/INS
Const MAX\_PATH = 260
Private Type FILETIME
 dwLowDateTime As Long
 dwHighDateTime As Long
End Type
Private Type WIN32\_FIND\_DATA
 dwFileAttributes As Long
 ftCreationTime As FILETIME
 ftLastAccessTime As FILETIME
 ftLastWriteTime As FILETIME
 nFileSizeHigh As Long
 nFileSizeLow As Long
 dwReserved0 As Long
 dwReserved1 As Long
 cFileName As String \* MAX\_PATH
 cAlternate As String \* 14
End Type
Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
Private Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" (ByVal hInternetSession As Long, ByVal sServerName As String, ByVal nServerPort As Integer, ByVal sUserName As String, ByVal sPassword As String, ByVal lService As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function FtpSetCurrentDirectory Lib "wininet.dll" Alias "FtpSetCurrentDirectoryA" (ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean
Private Declare Function FtpGetCurrentDirectory Lib "wininet.dll" Alias "FtpGetCurrentDirectoryA" (ByVal hFtpSession As Long, ByVal lpszCurrentDirectory As String, lpdwCurrentDirectory As Long) As Long
Private Declare Function FtpCreateDirectory Lib "wininet.dll" Alias "FtpCreateDirectoryA" (ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean
Private Declare Function FtpRemoveDirectory Lib "wininet.dll" Alias "FtpRemoveDirectoryA" (ByVal hFtpSession As Long, ByVal lpszDirectory As String) As Boolean
Private Declare Function FtpDeleteFile Lib "wininet.dll" Alias "FtpDeleteFileA" (ByVal hFtpSession As Long, ByVal lpszFileName As String) As Boolean
Private Declare Function FtpRenameFile Lib "wininet.dll" Alias "FtpRenameFileA" (ByVal hFtpSession As Long, ByVal lpszExisting As String, ByVal lpszNew As String) As Boolean
Private Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" (ByVal hConnect As Long, ByVal lpszRemoteFile As String, ByVal lpszNewFile As String, ByVal fFailIfExists As Long, ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As Long, ByRef dwContext As Long) As Boolean
Private Declare Function FtpPutFile Lib "wininet.dll" Alias "FtpPutFileA" (ByVal hConnect As Long, ByVal lpszLocalFile As String, ByVal lpszNewRemoteFile As String, ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean
Private Declare Function InternetGetLastResponseInfo Lib "wininet.dll" Alias "InternetGetLastResponseInfoA" (lpdwError As Long, ByVal lpszBuffer As String, lpdwBufferLength As Long) As Boolean
Private Declare Function FtpFindFirstFile Lib "wininet.dll" Alias "FtpFindFirstFileA" (ByVal hFtpSession As Long, ByVal lpszSearchFile As String, lpFindFileData As WIN32\_FIND\_DATA, ByVal dwFlags As Long, ByVal dwContent As Long) As Long
Private Declare Function InternetFindNextFile Lib "wininet.dll" Alias "InternetFindNextFileA" (ByVal hFind As Long, lpvFindData As WIN32\_FIND\_DATA) As Long
Const PassiveConnection As Boolean = True
Private Sub Form\_Load()
 'KPD-Team 2000
 'URL: http://www.allapi.net
 'E-Mail: [email protected]
 Dim hConnection As Long, hOpen As Long, sOrgPath As String
 'open an internet connection
 hOpen = InternetOpen("API-Guide sample program", INTERNET\_OPEN\_TYPE\_PRECONFIG, vbNullString, vbNullString, 0)
 'connect to the FTP server
 hConnection = InternetConnect(hOpen, "your ftp server", INTERNET\_DEFAULT\_FTP\_PORT, "your login", "your password", INTERNET\_SERVICE\_FTP, IIf(PassiveConnection, INTERNET\_FLAG\_PASSIVE, 0), 0)
 'create a buffer to store the original directory
 sOrgPath = String(MAX\_PATH, 0)
 'get the directory
 FtpGetCurrentDirectory hConnection, sOrgPath, Len(sOrgPath)
 'create a new directory 'testing'
 FtpCreateDirectory hConnection, "testing"
 'set the current directory to 'root/testing'
 FtpSetCurrentDirectory hConnection, "testing"
 'upload the file 'test.htm'
 FtpPutFile hConnection, "C:\test.htm", "test.htm", FTP\_TRANSFER\_TYPE\_UNKNOWN, 0
 'rename 'test.htm' to 'apiguide.htm'
 FtpRenameFile hConnection, "test.htm", "apiguide.htm"
 'enumerate the file list from the current directory ('root/testing')
 EnumFiles hConnection
 'retrieve the file from the FTP server
 FtpGetFile hConnection, "apiguide.htm", "c:\apiguide.htm", False, 0, FTP\_TRANSFER\_TYPE\_UNKNOWN, 0
 'delete the file from the FTP server
 FtpDeleteFile hConnection, "apiguide.htm"
 'set the current directory back to the root
 FtpSetCurrentDirectory hConnection, sOrgPath
 'remove the direcrtory 'testing'
 FtpRemoveDirectory hConnection, "testing"
 'close the FTP connection
 InternetCloseHandle hConnection
 'close the internet connection
 InternetCloseHandle hOpen
End Sub
Public Sub EnumFiles(hConnection As Long)
 Dim pData As WIN32\_FIND\_DATA, hFind As Long, lRet As Long
 'set the graphics mode to persistent
 Me.AutoRedraw = True
 'create a buffer
 pData.cFileName = String(MAX\_PATH, 0)
 'find the first file
 hFind = FtpFindFirstFile(hConnection, "\*.\*", pData, 0, 0)
 'if there's no file, then exit sub
 If hFind = 0 Then Exit Sub
 'show the filename
 Me.Print Left(pData.cFileName, InStr(1, pData.cFileName, String(1, 0), vbBinaryCompare) - 1)
 Do
 'create a buffer
 pData.cFileName = String(MAX\_PATH, 0)
 'find the next file
 lRet = InternetFindNextFile(hFind, pData)
 'if there's no next file, exit do
 If lRet = 0 Then Exit Do
 'show the filename
 Me.Print Left(pData.cFileName, InStr(1, pData.cFileName, String(1, 0), vbBinaryCompare) - 1)
 Loop
 'close the search handle
 InternetCloseHandle hFind
End Sub
Sub ShowError()
 Dim lErr As Long, sErr As String, lenBuf As Long
 'get the required buffer size
 InternetGetLastResponseInfo lErr, sErr, lenBuf
 'create a buffer
 sErr = String(lenBuf, 0)
 'retrieve the last respons info
 InternetGetLastResponseInfo lErr, sErr, lenBuf
 'show the last response info
 MsgBox "Error " + CStr(lErr) + ": " + sErr, vbOKOnly + vbCritical
End Sub

Das läuft auch mit der Standardversion von VB6, aber ganz ohne OCX kommt auch dieses Programm nicht aus.

Gruß, Rainer

Hallo Rainer,

sorry, jetzt muss ich nochmal rückfragen.

Also, ich sehe schon meine Werkzeuge.

Und; natürlich kann man mit VB 6 MASSENWEISE, sogar HOCHWERTIGE Programme erstellen, die KEINE OCX benötigen. Beweis; unter Project Verweise sind NUR die ersten 3 angeklickt, weil man die braucht. Das sind aber keine OCX…

Unter Projekt Komponenten ist weder ein STeuerelement, noch ein Designer, noch ein einfügbares Element ausgewählt.

Auf diese Weise habe ich eine ganze Warenwirtschaft programmiert, und die funktioniert OHNE OCX.

Und natürlich hat meine Warenwirtschaft div. Forms, Tasten, Listboxen, comboxen, usw.

Und das Ding funktioniert als EXE Datei genau.

Also, kann das sein, das wir von verschiedenen Dingen reden ???

Also nochmal; KEINE OCX, weil ich die mitliefern muss, und das WILL ICH NICHT. Ausserdem müssen OCX registriert werden in der Win Registry, und das WILL ICH AUCH NICHT.

Wenn VB 6 das also nicht mit Bordmitteln kann (was ja möglich ist), dann bitte NUR mit API Aufrufen, also Funktionsaufrufe die in Windows DLL Dateien enthalten sind, die sowieso im Betriebssystem enthalten sind.

Verstehtst du jetzt meine Intension ???

Frage, bei dem Beispiel weiter oben, WO wird denn da WELCHES OCX aufgerufen ?

Gruß
Jürgen

Hallo,

sorry, jetzt muss ich nochmal rückfragen.

Also, ich sehe schon meine Werkzeuge.

Und; natürlich kann man mit VB 6 MASSENWEISE, sogar
HOCHWERTIGE Programme erstellen, die KEINE OCX benötigen.
Beweis; unter Project Verweise sind NUR die ersten 3
angeklickt, weil man die braucht. Das sind aber keine
OCX…

OK, ich habe gerade mal nachgesehen, stimmt wirklich …

Unter Projekt Komponenten ist weder ein STeuerelement, noch
ein Designer, noch ein einfügbares Element ausgewählt.

Auf diese Weise habe ich eine ganze Warenwirtschaft
programmiert, und die funktioniert OHNE OCX.

Schön.

Und natürlich hat meine Warenwirtschaft div. Forms, Tasten,
Listboxen, comboxen, usw.

Und das Ding funktioniert als EXE Datei genau.

Also, kann das sein, das wir von verschiedenen Dingen reden
???

Kann es sein, daß Du einfach nur ein wenig agressiv daruf bist? Schlechter Tag, oder ist das immer so?

Also nochmal; KEINE OCX, weil ich die mitliefern muss, und das
WILL ICH NICHT.

Schrei doch nicht so.

Ausserdem müssen OCX registriert werden in der
Win Registry, und das WILL ICH AUCH NICHT.

Wenn VB 6 das also nicht mit Bordmitteln kann (was ja möglich
ist), dann bitte NUR mit API Aufrufen, also Funktionsaufrufe
die in Windows DLL Dateien enthalten sind, die sowieso im
Betriebssystem enthalten sind.

Verstehtst du jetzt meine Intension ???

Ich habe Dir ja inzwischen auch ein Programm gepostet, das das tut. Kannst du mir erklären, warum Du Dich so aufregst? Das ist ungesund.

Frage, bei dem Beispiel weiter oben, WO wird denn da WELCHES
OCX aufgerufen ?

Keins, VB benötigt nur eine dll, die Standard.exe kommt mit dieser dll aus, benötigt kein OCX. Ist das ein Grund so rumzuschreien?

Gruß, Rainer

Keins, VB benötigt nur eine dll, die Standard.exe kommt mit
dieser dll aus, benötigt kein OCX. Ist das ein Grund so
rumzuschreien?

Gruß, Rainer

Hallo Rainer,

ja…hmmm…was soll ich sagen ??

-(

Sorry, war nicht böse gemeint.

Danke dir für den Quelltext, werde ich in Kürze mal testen.

Kann ich mal was für dich tun ?

Oder schrei du mich doch mal an :smile: so als Ausgleich :smile:

Verdient hätte ich es (ehrlich).

Nichts für ungut.

Gruß
Jürgen

Hallo Jürgen,

Sorry, war nicht böse gemeint.

ist OK, vergessen wir’s einfach.

Danke dir für den Quelltext, werde ich in Kürze mal testen.

Kann ich mal was für dich tun ?

Klar, gelegentlich mal hier mitlesen und Fragen beantworten. Speziell bei ADODB bin ich immer etwas unsicher, dann müssen die User gelegentlich länger auf Antworten warten … :smile: Das scheint ja Dein Spezialgebiet zu sein.

Oder schrei du mich doch mal an :smile: so als Ausgleich :smile:

Och nö … es ist doch alles in Ordnung.

Bis demnächst,

Gruß, Rainer