Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0193: FTP-Client mit der Wininet.dll

 von 

Beschreibung 

Wer den Internet-Explorer installiert hat, kann die Vorteile dieser DLL nutzen. Gegenüber dem etwas maroden Inet-Steuerelement ist der FTP-Transfer hiermit wesentlich einfacher und fehlerfreier zu handhaben. Mit diesem kleinen FTP-Client lassen sich Dateien rauf- & runterladen, sowie Verzeichnisse erstellen, löschen und umbenennen. Zudem ist es möglich zwischen den Verzeichnissen bequem zu navigieren. Das Auslesen der Dateiattribute, -größen und Erstellungsdaten sowie Zeiten, wird ebenso berücksichtigt. Was hiermit nicht möglich sein wird, ist die Anzeige eines Progressbars.

Update nach einem Hinweis von Klaus Langbein am 23. September 2004: Nun werden die Daten nicht mehr aus dem Cache geladen, falls sie dort vorhanden sind. Weitere Informationen dazu siehe MSDN.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

FileTimeToSystemTime, FtpCreateDirectoryA (FtpCreateDirectory), FtpDeleteFileA (FtpDeleteFile), FtpFindFirstFileA (FtpFindFirstFile), FtpGetFileA (FtpGetFile), FtpPutFileA (FtpPutFile), FtpRemoveDirectoryA (FtpRemoveDirectory), FtpRenameFileA (FtpRenameFile), FtpSetCurrentDirectoryA (FtpSetCurrentDirectory), InternetCloseHandle, InternetConnectA (InternetConnect), InternetFindNextFileA (InternetFindNextFile), InternetGetLastResponseInfoA (InternetGetLastResponseInfo), InternetOpenA (InternetOpen)

Download:

Download des Beispielprojektes [6,63 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Project1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Kontrollkästchen-Steuerelement "Check2"
' Steuerelement: Textfeld "Text1"
' Steuerelement: Schaltfläche "Command3" (Index von 0 bis 5)
' Steuerelement: Optionsfeld-Steuerelement "Option1" (Index von 0 bis 1)
' Steuerelement: Schaltfläche "Command2"
' Steuerelement: Schaltfläche "Command1"
' Steuerelement: Listen-Steuerelement "List1"
' Steuerelement: Dateiauswahlliste "File1"
' Steuerelement: Verzeichnisauswahlliste "Dir1"
' Steuerelement: Festplattenauswahlliste "Drive1"
' Steuerelement: Kontrollkästchen-Steuerelement "Check1"
' Steuerelement: Schaltfläche "Command5"
' Steuerelement: Schaltfläche "Command4"
' Steuerelement: Beschriftungsfeld "Label14"
' Steuerelement: Beschriftungsfeld "Label13"
' Steuerelement: Beschriftungsfeld "Label10"
' Steuerelement: Beschriftungsfeld "Label9"
' Steuerelement: Beschriftungsfeld "Label15"
' Steuerelement: Beschriftungsfeld "Label12"
' Steuerelement: Beschriftungsfeld "Label11"
' Steuerelement: Beschriftungsfeld "Label8"
' Steuerelement: Beschriftungsfeld "Label7"
' Steuerelement: Beschriftungsfeld "Label6"
' Steuerelement: Beschriftungsfeld "Label5"
' Steuerelement: Beschriftungsfeld "Label1"
' Steuerelement: Beschriftungsfeld "label4"
' Steuerelement: Beschriftungsfeld "Label3"
' Steuerelement: Beschriftungsfeld "Label2"

Option Explicit

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 InternetCloseHandle Lib "wininet.dll" _
        (ByVal hInet As Long) As Integer

Private Declare Function FtpSetCurrentDirectory Lib "wininet.dll" _
        Alias "FtpSetCurrentDirectoryA" (ByVal hFtpSession As _
        Long, ByVal lpszDirectory As String) As Long
        
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

Private Declare Function FtpGetFile Lib "wininet.dll" Alias _
        "FtpGetFileA" (ByVal hFtpSession As Long, ByVal _
        lpszRemoteFile As String, ByVal lpszNewFile As String, _
        ByVal fFailIfExists As Boolean, ByVal dwFlagsAndAttributes _
        As Long, ByVal dwFlags As Long, ByVal dwContext As Long) _
        As Long

Private Declare Function FtpPutFile Lib "wininet.dll" Alias _
        "FtpPutFileA" (ByVal hFtpSession As Long, ByVal _
        lpszLocalFile As String, ByVal lpszRemoteFile As String, _
        ByVal dwFlags As Long, ByVal dwContext As Long) As Long
       
Private Declare Function FtpDeleteFile Lib "wininet.dll" _
        Alias "FtpDeleteFileA" (ByVal hFtpSession As Long, _
        ByVal lpszFileName As String) As Long

Private Declare Function FtpRenameFile Lib "wininet.dll" _
        Alias "FtpRenameFileA" (ByVal hFtpSession As Long, _
        ByVal lpszFromFileName As String, ByVal lpszToFileName _
        As String) As Long
        
Private Declare Function FtpCreateDirectory Lib "wininet" _
        Alias "FtpCreateDirectoryA" (ByVal hFtpSession As _
        Long, ByVal lpszDirectory As String) As Long

Private Declare Function FtpRemoveDirectory Lib "wininet" _
        Alias "FtpRemoveDirectoryA" (ByVal hFtpSession As _
        Long, ByVal lpszDirectory As String) As Long

Private Declare Function InternetGetLastResponseInfo Lib _
        "wininet.dll" Alias "InternetGetLastResponseInfoA" _
        (lpdwError As Long, ByVal lpszBuffer As String, _
        lpdwBufferLength As Long) As Long
    
Private Const ERROR_NO_MORE_FILES As Long = 18&
Private Const ERROR_INTERNET_EXTENDED_ERROR As Long = 12003&

Private Const FTP_TRANSFER_TYPE_BINARY As Long = &H0&
Private Const FTP_TRANSFER_TYPE_ASCII As Long = &H1&

Private Const INTERNET_FLAG_PASSIVE As Long = &H8000000
Private Const INTERNET_FLAG_RELOAD As Long = &H80000000
Private Const INTERNET_FLAG_KEEP_CONNECTION As Long = &H400000
Private Const INTERNET_FLAG_MULTIPART As Long = &H200000

Private Const INTERNET_OPEN_TYPE_PRECONFIG As Long = 0&
Private Const INTERNET_OPEN_TYPE_DIRECT As Long = 1&
Private Const INTERNET_OPEN_TYPE_PROXY As Long = 3&

Private Const INTERNET_INVALID_PORT_NUMBER As Long = 0&

Private Const INTERNET_SERVICE_FTP As Long = 1&
Private Const INTERNET_SERVICE_GOPHER As Long = 2&
Private Const INTERNET_SERVICE_HTTP As Long = 3&

Private Declare Function FileTimeToSystemTime Lib "kernel32" _
        (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) _
        As Long

Private Const MAX_PATH As Long = 260&
Private Const NO_ERROR As Long = 0&
Private Const FILE_ATTRIBUTE_READONLY As Long = &H1&
Private Const FILE_ATTRIBUTE_HIDDEN As Long = &H2&
Private Const FILE_ATTRIBUTE_SYSTEM As Long = &H4&
Private Const FILE_ATTRIBUTE_DIRECTORY As Long = &H10&
Private Const FILE_ATTRIBUTE_ARCHIVE As Long = &H20&
Private Const FILE_ATTRIBUTE_NORMAL As Long = &H80&
Private Const FILE_ATTRIBUTE_TEMPORARY As Long = &H100&
Private Const FILE_ATTRIBUTE_COMPRESSED As Long = &H800&
Private Const FILE_ATTRIBUTE_OFFLINE As Long = &H1000&

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 Type SYSTEMTIME
    wYear As Integer
    wMonth As Integer
    wDayOfWeek As Integer
    wDay As Integer
    wHour As Integer
    wMinute As Integer
    wSecond As Integer
    wMilliseconds As Integer
End Type

Private Const FTP_UAgent As String = "FTP Demo"

Private FTP_Server As String, FTP_User As String, FTP_PassW As String
Private hOpen As Long, hConnection As Long
Private transfer As Long
Private FileList() As WIN32_FIND_DATA
Private fData As WIN32_FIND_DATA

Private Sub Form_Load()
    FTP_Server = "ftp.qualcomm.com"
    FTP_User = "anonymous"
    FTP_PassW = "guest@unknown"
    
    ' FTP_Server = "ftp.adobe.com"
    ' FTP_User = "anonymous"
    ' FTP_PassW = "guest@unknown"
    
    Label10.Caption = FTP_Server
    Label13.Caption = FTP_User
    Label14.Caption = FTP_PassW
    
    Option1(0).Value = True
    Call ButtonsDisconnected
    Call File1_Click
End Sub

Private Sub Form_Unload(Cancel As Integer)
    If hConnection <> 0 Then InternetCloseHandle (hConnection)
    If hOpen <> 0 Then InternetCloseHandle (hOpen)
End Sub

Private Sub Command1_Click()
    Dim x As Integer
    Dim Pfad As String
    
    If File1.ListCount <> 0 Then
        For x = 0 To File1.ListCount - 1
            If File1.Selected(x) Then
                Pfad = File1.Path & "\" & File1.List(x)
                If Dir$(Pfad, vbNormal) <> "" Then
                    Call PutFile(Pfad)
                    DoEvents
                End If
            End If
        Next x
        fListDir (Label1.Caption)
        Call FillListBox
    End If
End Sub

Private Sub Command2_Click()
    Dim fFile As String
    Dim x As Integer
    
    x = List1.ListIndex
    If x <> -1 Then
        For x = 0 To List1.ListCount - 1
            If List1.Selected(x) And FileList(x).dwFileAttributes <> _
                FILE_ATTRIBUTE_DIRECTORY Then
            
                fFile = Trim$(FileList(x).cFileName)
                Call GetFile(Label1.Caption, fFile, File1.Path, Check2.Value = vbChecked)
                File1.Refresh
                DoEvents
            End If
        Next x
    Else
        Call MsgBox("Keine Datei ausgewählt!")
    End If
End Sub

Private Sub Command3_Click(Index As Integer)
    Select Case Index
        Case 0: List1.ListIndex = 1
                Call List1_DblClick
        Case 1: Call fListDir(Label1.Caption)
                Call FillListBox
        Case 2: Call ViewFile
        Case 3: Call DeleteFile
        Case 4: Call RenameFile
        Case 5: Call MakeDir
    End Select
End Sub

Private Sub Command4_Click()
    If hConnection <> 0 Then
        Call StatusText("Log off...")
        Call InternetCloseHandle(hConnection)
        Call InternetCloseHandle(hOpen)
        Call GetStatus
        
        hConnection = 0
        hOpen = 0
        
        Call ButtonsDisconnected
        List1.Clear
        Label1.Caption = ""
    End If
End Sub

Private Sub Command5_Click()
    Dim nFlag As Long
    Dim Proxy As String
    Dim Er As Boolean
    
    MousePointer = vbHourglass
    Label1.Caption = FTP_Server & "/"
    Call StatusText("Verbinde...")
    
    
    '### Für den Proxybetrieb
    'Proxy = "...."
    'hOpen = InternetOpen(FTP_UAgent, INTERNET_OPEN_TYPE_PROXY, _
    '        Proxy, vbNullString, 0)


    '### Ohne Proxy
    hOpen = InternetOpen(FTP_UAgent, INTERNET_OPEN_TYPE_DIRECT, _
            vbNullString, vbNullString, 0)
   
    If hOpen <> 0 Then
        If Check1.Value Then nFlag = INTERNET_FLAG_PASSIVE
        hConnection = InternetConnect(hOpen, Label10.Caption, _
                      INTERNET_INVALID_PORT_NUMBER, _
                      Label13.Caption, Label14.Caption, _
                      INTERNET_SERVICE_FTP, nFlag, 0)
                      
        Call GetStatus
        
        If hConnection <> 0 Then
            Call fListDir(Label1.Caption)
            Call FillListBox
            Call ButtonsConnected
            Call GetStatus
        Else
            Er = True
        End If
    Else
        Er = True
    End If
   
    If Er Then Call StatusText("Fehler beim Verbindungsaufbau")
    MousePointer = vbDefault
End Sub

Private Sub List1_Click()
    Dim x As Integer, Attr As Integer
    Dim aa As String
    Dim l As Long
    Dim sTime As SYSTEMTIME
    Dim lTime As FILETIME
    
    x = List1.ListIndex
    If x > -1 Then
        Attr = FileList(x).dwFileAttributes
        If Attr And FILE_ATTRIBUTE_READONLY Then aa = "W "
        If Attr And FILE_ATTRIBUTE_HIDDEN Then aa = aa & "H "
        If Attr And FILE_ATTRIBUTE_SYSTEM Then aa = aa & "S "
        If Attr And FILE_ATTRIBUTE_DIRECTORY Then aa = aa & "D "
        If Attr And FILE_ATTRIBUTE_ARCHIVE Then aa = aa & "A "
        If Attr And FILE_ATTRIBUTE_NORMAL Then aa = aa & "N "
        If Attr And FILE_ATTRIBUTE_TEMPORARY Then aa = aa & "T "
        If Attr And FILE_ATTRIBUTE_COMPRESSED Then aa = aa & "C"
        Label7.Caption = Trim$(aa)
        
        Label12.Caption = FileList(x).nFileSizeLow
     
        lTime = FileList(x).ftLastWriteTime
        l = FileTimeToSystemTime(lTime, sTime)
        Label15.Caption = CalcFTime(sTime)
    End If
End Sub

Private Sub List1_DblClick()
    Dim x As Integer
    Dim fFile As String, fPath As String
    
    If List1.ListCount <> 0 Then
        If FileList(List1.ListIndex).dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY Then
            fFile = Trim$(FileList(List1.ListIndex).cFileName)
            MousePointer = vbHourglass
            
            If fFile = ".." Then
                If Label1.Caption <> FTP_Server & "/" Then
                    fPath = Label1.Caption & fFile
                    Call fListDir(fPath)
                    Call FillListBox

                    fPath = Left(fPath, Len(fPath) - 3)
                    For x = Len(fPath) To 1 Step -1
                        If Mid$(fPath, x, 1) = "/" Then
                            fPath = Left$(fPath, x)
                            Exit For
                        End If
                    Next x
                    
                    Label1.Caption = fPath
                End If
                
            ElseIf fFile = "." Then
                fPath = Label1.Caption
                Call fListDir(fPath)
                Call FillListBox
                
            Else
                fPath = Label1.Caption & fFile
                Call fListDir(fPath)
                Call FillListBox
                Label1.Caption = fPath & "/"
            End If
            
            MousePointer = vbDefault
        End If
    End If
End Sub

Private Sub Option1_Click(Index As Integer)
    If Index = 0 Then
        transfer = FTP_TRANSFER_TYPE_ASCII
    Else
        transfer = FTP_TRANSFER_TYPE_BINARY
    End If
End Sub

Private Sub File1_Click()
    Label5.Caption = File1.Path & "\" & File1.FileName
End Sub

Private Sub Dir1_Change()
    File1.Path = Dir1.Path
    Label5.Caption = File1.Path & "\" & File1.FileName
End Sub

Private Sub Drive1_Change()
    Dir1.Path = Drive1.Drive
End Sub

Private Sub FillListBox()
    Dim fDir() As WIN32_FIND_DATA, fFile() As WIN32_FIND_DATA
    Dim Mem As WIN32_FIND_DATA
    Dim fName As String, fAttr As String, aa As String
    Dim x As Integer, y As Integer, Max As Integer
    
    Max = UBound(FileList) - 1
    ReDim fFile(0 To 0)
    ReDim fDir(0 To 0)
    
    MousePointer = vbHourglass
    Call StatusText("Sortiere Verzeichnis...")
    For x = 0 To Max
        If FileList(x).dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY Then
            fDir(UBound(fDir)) = FileList(x)
            ReDim Preserve fDir(0 To UBound(fDir) + 1)
        Else
            fFile(UBound(fFile)) = FileList(x)
            ReDim Preserve fFile(0 To UBound(fFile) + 1)
        End If
    Next x
    
    For x = 0 To UBound(fDir) - 1
        For y = 0 To UBound(fDir) - 1
            If LCase(fDir(y).cFileName) > LCase(fDir(x).cFileName) Then
                Mem = fDir(y)
                fDir(y) = fDir(x)
                fDir(x) = Mem
            End If
        Next y
    Next x
         
    For x = 0 To UBound(fFile) - 1
        For y = 0 To UBound(fFile) - 1
            If LCase(fFile(y).cFileName) > LCase(fFile(x).cFileName) Then
                Mem = fFile(y)
                fFile(y) = fFile(x)
                fFile(x) = Mem
            End If
        Next y
    Next x
    
    List1.Clear
    y = 0

    For x = 0 To UBound(fDir) - 1
        FileList(y) = fDir(x)
        List1.AddItem UCase(Trim$(FileList(x).cFileName))
        y = y + 1
    Next x
    
    For x = 0 To UBound(fFile) - 1
        FileList(y) = fFile(x)
        List1.AddItem LCase(Trim$(FileList(y).cFileName))
        y = y + 1
    Next x
    
    MousePointer = vbDefault
    Call StatusText("Ok")
End Sub

Private Sub DeleteFile()
    Dim fFile As String
    Dim x As Integer
    Dim Result As Long
    
    x = List1.ListIndex
    If x <> -1 Then
        If chFDir(Label1.Caption) Then
            MousePointer = vbHourglass
            fFile = Trim$(FileList(x).cFileName)
            
            If FileList(x).dwFileAttributes <> FILE_ATTRIBUTE_DIRECTORY Then
                Call StatusText("Lösche Datei...")
                Result = FtpDeleteFile(hConnection, fFile)
                
            ElseIf Left$(fFile, 1) <> "." Then
                Call StatusText("Lösche Verzeichnis...")
                Result = FtpRemoveDirectory(hConnection, fFile)
            End If
            
            Call GetStatus
            MousePointer = vbDefault
        End If
        
        If Result = 0 Then
            Call MsgBox("Datei kann nicht gelöscht werden!")
        Else
            Call fListDir(Label1.Caption)
            Call FillListBox
        End If
    Else
        Call MsgBox("Keine Datei ausgewählt!")
    End If
End Sub

Private Sub MakeDir()
    Dim fDir As String
    Dim x As Integer
    Dim Result As Long
        
    fDir = Trim$(InputBox("Neuen Verzeichnisnamen eingeben", "Umbenennen"))
    If fDir <> "" Then
        If chFDir(Label1.Caption) Then
            Call StatusText("Erstelle Verzeichnis...")
            MousePointer = vbHourglass
            Result = FtpCreateDirectory(hConnection, fDir)
            MousePointer = vbDefault
            Call GetStatus
            
            If Result <> 0 Then
                fListDir (Label1.Caption)
                Call FillListBox
            Else
                Call MsgBox("Verzeichnis kann nicht erstellt werden!")
            End If
            
        End If
    End If
End Sub

Private Sub ViewFile()
    Dim fFile As String
    Dim x As Integer
        
    x = List1.ListIndex
    If x <> -1 Then
        If FileList(x).dwFileAttributes <> FILE_ATTRIBUTE_DIRECTORY Then
            fFile = Trim$(FileList(x).cFileName)
            Call GetFile(Label1.Caption, fFile, App.Path)
            Shell "notepad.exe " & App.Path & "\" & fFile, vbNormalFocus
        End If
    Else
        Call MsgBox("Keine Datei ausgewählt!")
    End If
End Sub

Private Sub RenameFile()
    Dim fFile As String, ToFile As String
    Dim x As Integer
    Dim Result As Long
    
    x = List1.ListIndex
    If x <> -1 Then
        fFile = Trim$(FileList(x).cFileName)
        ToFile = InputBox("Neuen Dateinamen eingeben", "Umbenennen", fFile)
        
        If Len(ToFile) > 0 Then
            If chFDir(Label1.Caption) Then
                Call StatusText("Benenne um...")
                MousePointer = vbHourglass
                Result = FtpRenameFile(hConnection, fFile, ToFile)
                Call GetStatus
                
                If Result <> 0 Then
                    Call fListDir(Label1.Caption)
                    Call FillListBox
                Else
                    Call MsgBox("Umbenennen nicht möglich")
                End If
                
                MousePointer = vbDefault
            End If
        End If
    Else
        Call MsgBox("Keine Datei ausgewählt!")
    End If
End Sub

Private Sub GetFile(ByVal fDir As String, ByVal fFile As String, _
    ByVal lFile As String, ByVal UseCache As Boolean)
    Dim Result As Long
    Dim Flags As Long
    
    lFile = lFile & "/" & fFile
    Call chFDir(fDir)
    MousePointer = vbHourglass
    StatusText ("Lade Datei...")
    
    If UseCache Then
        Flags = transfer
    Else
        Flags = transfer Or INTERNET_FLAG_RELOAD
    End If
    
    Result = FtpGetFile(hConnection, fFile, lFile, 0, 0, Flags, 0)
    
    Call GetStatus
    MousePointer = vbDefault
    If Result = 0 Then Call MsgBox("Übertragunsfehler")
End Sub

Private Sub PutFile(lFile As String)
    Dim Result As Long
    Dim x As Integer
    Dim fFile As String
        
    If chFDir(Label1.Caption) Then
        For x = Len(lFile) To 1 Step -1
            If Mid$(lFile, x, 1) = "\" Then
                fFile = Mid$(lFile, x + 1)
                Exit For
            End If
        Next x
        
        If fFile <> "" Then
            MousePointer = vbHourglass
            Call StatusText("Übertrage Datei...")
            Result = FtpPutFile(hConnection, lFile, fFile, transfer, 0)
            Call GetStatus
            MousePointer = vbDefault
            If Result = 0 Then Call MsgBox("Übertragungsfehler!")
        End If
    End If
End Sub

Private Function chFDir(fDir As String) As Boolean
    Dim Result As Long
    
    If Len(fDir) > 0 Then
        On Error Resume Next
        fDir = Mid(fDir, Len(Label10.Caption) + 1, Len(fDir) - Len(Label10.Caption))
        On Error Goto 0
        
        MousePointer = vbHourglass
        StatusText ("Setze Pfad...")
        Result = FtpSetCurrentDirectory(hConnection, fDir)
        Call GetStatus
        MousePointer = vbDefault
        
        If Result = 0 Then
            Call MsgBox("Verzeichnis nicht vorhanden!")
        Else
            chFDir = True
        End If
    End If
End Function

Private Sub fListDir(fDir As String)
    Dim hFile As Long, Result As Long
    
    ReDim FileList(0 To 0)
    
    If chFDir(fDir) Then
        MousePointer = vbHourglass
        Call StatusText("Lese Verzeichnis...")
        fData.cFileName = String(MAX_PATH, 0)
        hFile = FtpFindFirstFile(hConnection, Trim$(Text1.Text), fData, 0, 0)
        Call FileAdd

        Do
            fData.cFileName = String(MAX_PATH, 0)
            Result = InternetFindNextFile(hFile, fData)
            If Result <> 0 Then Call FileAdd
        Loop Until (Result = 0)
    
        Call InternetCloseHandle(hFile)
        Call GetStatus
        MousePointer = vbDefault
        
        If Left$(FileList(0).cFileName, 1) <> "." Then
            fData.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY
            fData.cFileName = "." & Chr$(0)
            Call FileAdd
            fData.cFileName = ".." & Chr$(0)
            Call FileAdd
        End If
    End If
End Sub

Private Sub FileAdd()
    Dim x As Integer, fFile As String
    
    fFile = fData.cFileName
    x = InStr(1, fFile, Chr$(0))
    If x > 0 Then
        fFile = Trim$(Left$(fFile, x - 1))
    Else
        fFile = ""
    End If
    
    If fFile <> "" Then
        fData.cFileName = fFile
        FileList(UBound(FileList)) = fData
        ReDim Preserve FileList(0 To UBound(FileList) + 1)
    End If
End Sub

Private Function CalcFTime(FTime As SYSTEMTIME) As String
    Dim WT(0 To 6) As String, Datum As String
    Dim Zeit As String, aa As String

    WT(0) = "So"
    WT(1) = "Mo"
    WT(2) = "Di"
    WT(3) = "Mi"
    WT(4) = "Do"
    WT(5) = "Fr"
    WT(6) = "Sa"
    
    With FTime
        Datum = WT(.wDayOfWeek) & " " & .wDay & "." & .wMonth & "." & .wYear
        aa = .wMinute
        If Len(aa) = 1 Then aa = "0" & aa
        Zeit = .wHour & ":" & aa
        CalcFTime = Datum & " um " & Zeit
    End With
End Function

Private Sub GetStatus()
    Dim Buffer As String, aa As String
    Dim l As Long, Inf As Long
    
    Call InternetGetLastResponseInfo(Inf, vbNullString, l)
    
    If Inf Then
        Buffer = String(l + 1, 0)
        Call InternetGetLastResponseInfo(Inf, Buffer, l)
        aa = Inf & " " & Buffer
    Else
        aa = "Ok"
    End If
    
    Label9.Caption = aa
    Label9.Refresh
End Sub

Private Sub StatusText(Text As String)
    Label9.Caption = Text
    Label9.Refresh
End Sub

Private Sub ButtonsConnected()
    Dim x As Integer
    
    Command1.Enabled = True
    Command2.Enabled = True
    
    For x = 0 To Command3.UBound
        Command3(x).Enabled = True
    Next x
    
    Command4.Enabled = True
    Command5.Enabled = False
    Check1.Enabled = False
End Sub

Private Sub ButtonsDisconnected()
    Dim x As Integer
    
    Command1.Enabled = False
    Command2.Enabled = False
        
    For x = 0 To Command3.UBound
        Command3(x).Enabled = False
    Next x
        
    Command4.Enabled = False
    Command5.Enabled = True
    Check1.Enabled = True
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Project1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Fehler in Function chFDir - Lompe 23.01.22 12:58 1 Antwort

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 98 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von JOJO am 08.07.2011 um 18:17

Hi bei mir funzt der Code nur in VB6 aber sobald ich eine Exe erstelle kann ich mich zwar noch Connecten aber beim Upload der Daten (txt-Datei) hängt sich die exe auf.
System: Win7
Gruß JOJO

Kommentar von Max am 12.07.2009 um 13:44

Bei mir kommt ein Fehler bei:

bei viewfile

Call GetFile(Label1.Text, fFile, My.Application.Info.DirectoryPath)

kein argument angegeben oder so kann mir wer helfen

Kommentar von FrankAdelik am 09.05.2008 um 08:18

Moin.
Der einzige Fehler der bei mir beim Kompilieren kam war der hier:

Call GetFile(Label1.Caption, fFile, App.Path, Check2.Value = 1)

Im Original fehlt in der Routine ViewFile bei der Instruktion GetFile der vierte Parameter. Und zwar ob vom Cache gelesen werden soll oder nicht. Das ist Check2 und um daraus nen boolean zu machen = 1.

Gruß

Frank

Kommentar von Suter Andreas am 07.01.2008 um 07:31

neu e-mail

Kommentar von Xels am 04.01.2008 um 11:17

Das läuft ja alles prima, aber jetzt fehlt mir nur noch eines.. Ich muss die Rechte der hochgeladenen Dateien ändern können. Hat da jemand eine Idee?

Und kommt mir bitte nicht mit WinSCP und sowas.. Ich führe das als Batch aus. Da gibt es keinen Usereingriff.

Kommentar von BulldogISL am 30.12.2007 um 14:39

Hallo @ all.. !!

.. hat vielleicht schon jemand eine Ahnung, warum ich den Client nicht als EXE abspeichern kann..

Ich scheine ja offensichtlich nicht der Einzige zu sein, dem es so geht..

Grüße an dieser Stelle besonders an ZERROX

Über eine rasche Hilfe (welcher Art auch immer) würde ich mich sehr freuen..!!

Gruß

André

Kommentar von pire am 27.11.2007 um 12:10

When your FTP Directory Listing won't get updated use following Code instead

Private Sub fListDir(fDir As String)
Dim hFile As Long, Result As Long

ReDim FileList(0 To 0)

If chFDir(fDir) Then
MousePointer = vbHourglass
Call StatusText("Lese Verzeichnis...")
fData.cFileName = String(MAX_PATH, 0)
hFile = FtpFindFirstFile(hConnection, Trim$(Text1.Text), _
fData, INTERNET_FLAG_RELOAD, 0)
Call FileAdd

Do
fData.cFileName = String(MAX_PATH, 0)
Result = InternetFindNextFile(hFile, fData)
If Result <> 0 Then Call FileAdd
Loop Until (Result = 0)

Call InternetCloseHandle(hFile)
Call GetStatus
MousePointer = vbDefault

If Left$(FileList(0).cFileName, 1) <> "." Then
fData.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY
fData.cFileName = "." & Chr$(0)
Call FileAdd
fData.cFileName = ".." & Chr$(0)
Call FileAdd
End If
End If
End Sub


the diff is
OLD:
hFile = FtpFindFirstFile(hConnection, Trim$(Text1.Text), _
fData, 0, 0)

NEW:
hFile = FtpFindFirstFile(hConnection, Trim$(Text1.Text), _
fData, INTERNET_FLAG_RELOAD, 0)

Kommentar von zerrox am 24.08.2007 um 09:53

Wenn ich den Clienten als .exe speichern will kommt argument nich optional was kann ich da machen. Call GetFile(Label1.Caption, fFile, App.

Kommentar von bernd_sw am 23.08.2007 um 14:48

Hallo,

der Client funktioniert super, nur habe ich das gleiche Problem in der Firma mit dem Firewall eintrag. Bei WS-FTP gebe ich "Use firewall with no logon" an. wie kann ich dies im Code realisieren?

Ich hoffe jemand hat eine Idee

Bruß
Bernd

Kommentar von Luet am 11.02.2007 um 20:58

Hallo,
sehr guter Tipp :-)

Aber wie baut man folgendes ein:
Ich möchte die Attribute der Dateien auf dem Server ändern.
Welcher Profi ist im Stande, das mit diesen Tipp zu realisieren?
Danke für Hilfe
luet

Kommentar von Boris Risker am 07.02.2007 um 13:46

Hallo zuammen,

bei mir funktioniert der Code irgendwie nicht richtig, genau genommen das Directory Auflisten.

Wenn ich meine Access-Anwendung mit dem Code starte, kriege ich eien richtige Liste von DEatien auf meinem FTP-Server. Wenn ich allerdings dann eine Datei lösche oder hinzufüge und dann nochmal das Auflisten starte, so zeigt er die alte Liste ! D. h. er berücksichtigt nicht die Ab-/Zugänge ... wenn ich dann nochmal die Access-Anwendung schließe und wieder öffne, zeigt er die Liste richtig ...

Bitte kann mir einer helfen ??? das wäre echt wichtig für mich ...

Danke im voruas,
Boris

Kommentar von Jochen.Martens am 22.12.2006 um 08:31

Wenn ich das FTP mit einem Proxy Server benutze, wird die Verbindung zwischendurch relativ schnell abgebrochen. gibt es eine Möglichkeit eine minimale Verbindungszeit einzustellen?
Gruß
Jochen

Kommentar von Suter Andreas am 21.12.2006 um 23:56

Feher von Ingo Dormann am 01.02.2006 um 14:42

Aabe das gleiche mit win XP Home

Hat jemand eine lösung

Kommentar von Ingo Dormann am 01.02.2006 um 14:42

habe das gleiche Problem wie bei 'Von nervebehale am 15.07.2005' - die Adressen von Proxy und FTP-Server sind korrekt (ping), hOpen = '13369348' aber hConnection = '0' d.h. "Fehler beim Verbindungsaufbau" und mit WS_FTP geht alles ohne Probleme! - Wäre schön, den richtigen Tipp zu bekommen ;-)

Kommentar von Stefan Kaumeier am 14.11.2005 um 13:44


Was tun, wenn FTPGetFileA ohne Fehler durchläuft, aber im Anschluss keine Datei auf dem lokalen Rechner zu finden ist.
FTPPutFileA funktioniert. Habe schon seit Stunden alles mögliche probiert - ohne Erfolg. Kann es sein, dass die Date im Cache hängt und nicht geschrieben wird.
Für einen heißen Tipwäre ich recht dankbar.

mfg
SK

Kommentar von CeVau am 09.11.2005 um 21:31

Oioi

funzt super auf XP/VB5 mit den Änderungen von
=> Alex am 10.06.2004 um 09:57

CeVau

Kommentar von nervebehale am 15.07.2005 um 01:26

Hallöchen!

Der Source funzt bei mir zuhause ja ganz Prima! Aber ich muß über einen Proxy von der Firma aus Arbeiten. Von diesem Proxy/Firewall habe ich eine Extra Adresse die ich auch dementsprechend bei "'### Für den Proxybetrieb" eingepflegt habe. Leider funzt das aber nicht, warum?
Nutze ich z.B. WS_ftp oder etwa filezilla und gebe die Adresse unter Proxy ein so funzt das. Warum nur nicht im Progcode HEUL.

Kann mir da jemand weiterhelfen ?????

Herzliche Grüße

nervebehale

Kommentar von Joachim Siebert am 07.07.2005 um 11:01

Script läuft fein ...

Hat jemand eine idee, wie ich die FTP Detail mit loggen kann? Ich benötige eine logfile der up und downloads.

Die Function gibt ja soviel nicht her ...
Call InternetGetLastResponseInfo(Inf, vbNullString, l)

Jemand eine idee ... ?

Joachim

Kommentar von Marko am 30.03.2005 um 10:16

Hallo,
hat denn schon jemand eine Möglichkeit gefunden, wie man die Rechte der upgeloadeten Dateien ändern bzw. diese gleich beim Upload angeben kann ?

Kommentar von Janine am 21.01.2005 um 10:40

Hallo @ll,

Bei funktioniert es nicht so richtig. Ich benutzte den FTP um zwischen Client(normale Workstation) und Host (AS/400 "Großrechnersystem von IBM) Dateien zu uploaden/downloaden.

Mein Problem ist das ich nicht auf alle Bibliotheken auf der AS/400 zugreifen kann. Ich kann die Verzeichnisse absolut nicht wechseln ohne das er mir einen Fehler (5) bringt.

Könnte mir bitte jemand helfen! Ich verzweifle sonst noch ganz.

Danke und Gruß Janine

Kommentar von Reinhard am 26.11.2004 um 16:38

Hallo condi

Danke für deine Antwort.
Wie wird eine ftp-verb. via ssh getunnelt?

Reinhard

Kommentar von condi am 21.11.2004 um 20:53

nö, sftp geht nicht. ist ein komplett anderes protokoll - kannst aber einen normale ftp-verb. via ssh tunneln.

Kommentar von Reinhard Bertschler am 04.10.2004 um 09:56

Kann ich auf diesem Weg auch eine sichere FTP Verbindung herstellen (SFTP).

Besten Dank im voraus.

Reinhard

Kommentar von Alex am 12.08.2004 um 15:30

@Von Vulvo

The solution is posted from me 3 post before =)
Now a translation into english: (Hope you will understand it ;-)


Hi,

I found a logical error in this program..
The code is written for an absolute path but there is only the relative path available.

Now you have to posibilities to correct this:
- 1 write all for abolute
- 2 write all for relative

I like relative more so i have choosen the second posibility.
Here are the changes in the source:

Private Sub Command5_Click()
'...
' Instead of Label1.Caption = FTP_SERVER & "/"
Label1.Caption = "/"
'...
End Sub

Private Sub List1_DblClick()
'...
' Instead of If Label1.Caption <> FTP_SERVER & "/" Then
If Label1.Caption <> "/" Then
'...
End Sub

Private Function chFDir(fDir As String) As Boolean
'...
' delete: fDir = Mid(fDir, Len(Label10.Caption) + 1, Len(fDir) - Len(Label10.Caption))
'...
End Sub


For question etc. write me an e-mail:
activevb_de_FTP.20.Taube@spamgourmet.com

Don't panic the emailadress works fine.

mfg Alex

Kommentar von Fulvio am 12.08.2004 um 14:57

i can't create a remote directory, i can only remove... can you help me ?

Kommentar von Da-Freak am 10.06.2004 um 10:57

Vielen dank Alex funktioniert wunderbar =D THX

Kommentar von rambodieschen am 10.06.2004 um 10:42

Jetzt fehlt nur noch eine Downloadfortschrittsanzeige + downloadgeschwindigkeit. Ein Abbruch Button und das der download wieder fortfährt.
Mal gucken ich schlag mich durch die unkommentierte Codewüste durch und schreibe hier sobald ich etwas neues dazu programmiert habe.
PS geil danke für den Tip gegen den Laufzeitfehler 5. Super work.

Kommentar von Alex am 10.06.2004 um 09:57

Hi,

Hab den Denkfehler in dem Programm gefunden..
Der Code ist für den absoluten Pfad geschrieben, jedoch liegt nur der relative Pfad vor.

Jetzt gibt es 2 Möglichkeiten entweder ganz auf absolut oder ganz auf relativ umstellen.

Ich finde relativ schöner also hier die kleinen Eingriffe:
[Code]
Private Sub Command5_Click()
'...
' Anstatt Label1.Caption = FTP_SERVER & "/"
Label1.Caption = "/"
'...
End Sub

Private Sub List1_DblClick()
'...
' Anstatt If Label1.Caption <> FTP_SERVER & "/" Then
If Label1.Caption <> "/" Then
'...
End Sub

Private Function chFDir(fDir As String) As Boolean
'...
' löschen: fDir = Mid(fDir, Len(Label10.Caption) + 1, Len(fDir) - Len(Label10.Caption))
'...
End Sub
[Code]

Bei Fragen etc. einfach ne Mail schreiben...

mfg Alex

Kommentar von Oliver am 16.05.2004 um 15:10

Hallo,

genau an der selben Stelle wie da-freak bekomme ich einen Laufzeitfehler 5 wenn ich in ein Unterverzeichnis wechseln möchte, oder wieder zurück.
Bei allem was mit Verzeichnissen zu tun hat merke ich eben.
Egal ob wechseln, anlegen, umbenennen etc..

Private Function chFDir(fDir As String) As Boolean

Weis einer was das ist und wie man diesen Fehler behebt?

Cu

Kommentar von da-freak am 12.05.2004 um 18:04

Ich hab da ne Problem.
Wenn ich ein Untverzeichnis erstelle und in diesen unterordner eine datei hochladen will kommt ne error.
es muss an dieser zeile liegen
fDir = Mid(fDir, Len(Label10.Caption) + 1, Len(fDir) - Len(Label10.Caption))
kann mir jemand helfen

mfg Da-Freak

Kommentar von Raul am 29.04.2004 um 23:11

hallo.
ich hab das script ausprobiert.
soweit so gut, habe mich zu einem ftp verbunden, und versucht eine datei hochzuladen, jedoch vergebens.

es kommt eine fehlermeldung "Laufzeitfehler '5'"

dann habe ich im vb6 ma des ausgeführt und es wird ein fehler angezeigt bei

Private Sub Form_Load()

das is ja da, wo die ftp logindaten reingeschrieben werden.

im progg sind 3 fehler:

beim ordner erstellen kommt laufzeitfehler

wenn man eine datei hochladen will kommt laufzeitfehler

wenn man manche ordner betreten will, kommt die meldung "Ordner nicht vorhanden" obwohl er da ist und wenn man da ok lickt kmmt wiederum laufzeitfehler


nun meine frage, könnten sie es fixen? wäre wichtig, denn das tool is genial....


würd mich über antworten freuen, danke

Kommentar von Ansgar Walter am 15.02.2004 um 14:12

Hallo,
ein toller Tipp!

Ich habe es in eine MS-ACCESS-Anwendung übernommen
und es hat auf Anhieb funktioniert!

Es könnten zwar noch ein paar mehr Kommentare und sinnvolle
Variablennamen (z.B. strStatus statt aa in GetStatus)
verwendet werden, aber dennoch vielen Dank!

Gruss AW

Kommentar von luet am 13.02.2004 um 14:49

Hallo, toller Tipp !!
Was mich besonders interressiert ist, wie man über einen Proxy-Server das Ganze händelt. Du hast es zwar im Code kurz angefangen aber nicht so ausführlich, dass ich damit was anfangen kann . Es wäre schön könntest Du diesen Tipp dahingehend erweitern !
Ich würde mich sehr freuen, wenn Du Dich mal bei mir meldest, danke. :-)
luet

Kommentar von wchai am 26.01.2004 um 03:58

NO

Kommentar von mcd-datteln am 18.12.2003 um 11:57

Erst einmal SUPER Tipp!
Ich nutze diese variante schon etwas länger! Doch jetzt habe ich Probleme mit dem Upload und Download ( Fehler: Übertrgunsfehler)! Die Datenbank die ich mit dieser Variante Up- / Downloade ist mit der Zeit gewachsen (6 MB). Gibt es eine Möglichkteit einzustellen, wie lange die Vernindung gehalten werden soll oder die grösse?
Oder habe ich die Möglichkeit die Datei zu zippen und dann uploaden + auf dem Server entpacken?

Besten Dank shon einmal im vorraus...

Kommentar von micha am 26.11.2003 um 17:05

hallo, ich moechte lediglich ein paar files, die in einem string-array stehen auf einen server schieben. dass die o.g. loesung ideal ist und besser als das alte inet-control liegt auf der hand. gibt es eine "abgespreckte version" die lediglich die funktionalitaet anbietet ?

gruZZ micha

Kommentar von Juergen am 11.11.2003 um 10:03

Hallo!
Wie kann ich gliech nach demm verbinden in einen bestimmten unterortner wechsel?
Habe ein Prog. das die nach einwahl die Dyn-IP auslest und in eine Testdatei schreibt. Bis jetzt übertrage ich diese Datei Stüntlich mit dem Prog "ftp Voyager" auf einen ftp.
Wäre schön wenn ich das an mein DYN Prog anhängen könnte?

Kommentar von Viktor am 30.10.2003 um 13:17

hallo,
bei mir klappt das tool ganz super.
jedoch beim download.. kann man das programm nicht benutzen, was kann ich dagegen tun?

Gibts da ein befehl wo der den speed anzeigt ? oder wie viel er grade schon gedowloaded hat ?? bitte um hilfe :)

Kommentar von Andreas am 20.05.2003 um 10:08

Hallo,

ich würde das Programm in einer Firewall Umgebung gerne umsetzen. Wir haben hier ein Socks Cleint (Sockscap32) mit dem ich durch die Firewall durchkomme. Zwecks eines täglichen automatisierten FTP Uploads würde ich aber gerne dieses Programm umsetzen. Nur wie und wo kann ich hier die Angaben zum Tunneln der Firewall eingeben ? (quasidas vorherige Starten des Socks Programm wenn ich es händisch mache...)
Gruss

Andreas

Kommentar von Nicht-Durch-Blicker am 07.05.2003 um 23:20

Gott welcher FR34K hat das geschrieben?
Hast du zuviel Zeit oder so?

Kommentar von Erdal am 11.04.2003 um 14:45

Hallo,
ich bin ein Neueinsteiger bei VB. Ich programmiere im Rahmen eines Praktikums kleine Programme für betriebliche Anwendungen. Momentan soll ich ein ftp Programm programmieren. Habe als Quelle ur ein Buch, indem ftp-Download nur mit diesem inet-Steuerelement beschrieben wird. Um es kurz zu fassen, kann ich Ihnen mein Code schicken, so dass Sie mal einen Blick drüber werfen, was daran falsch ist, da es nicht funktioniertt?
Gruß

Kommentar von Nadine am 03.04.2003 um 15:18

Hallo Leute,

hab da mal ne Frage, kann man hierbei auch irgendwie einstellen, das man einen Passiven Transfer benutzen möchte?

Thanks

Kommentar von jaCz am 21.03.2003 um 13:50

AN ALLE:

Fragen würde ich im VB5/6-Forum stellen, dort werden sie professioneller beantwortet!

Kommentar von Raller am 18.03.2003 um 15:31

Hat jemand schon rausgefunden, welche Art von Proxy-Einstellung man machen muß?
Gruß
Raler

Kommentar von flychen am 14.02.2003 um 08:26

Wie man den FTP Port ändert habe ich nun endlich herausgefunden :)

Einfach diese Zeile mit in den Declarartionsteil:

Const INTERNET_DEFAULT_FTP_PORT = 22 ' je nachdem auf welchen port man connecten möchte

' und bei Private Sub Command5_Click()
' INTERNET_INVALID_PORT_NUMBER ersetzen durch: INTERNET_DEFAULT_FTP_PORT

mfg
flychen

Kommentar von fly am 01.02.2003 um 14:13

wie kann ich die ftp daten,die benutzt werden sollen, aus einer *.txt auslesen lassen? also nicht wie hier fest im code verwendet

Kommentar von Dave am 10.12.2002 um 17:24

geil! einfach geil! und bestimmt viel arbeit!

Kommentar von Stefan am 22.10.2002 um 15:34

Wie kann ich denn den FTP-Port ändern? Ich möchte nicht auf Port 21 zugreifen sondern auf Port 65 (Ist ein Sonderfall, ich weiß)

Kommentar von TheDAP am 21.08.2002 um 22:17

aaalso ich hab nen kleines prob: kann ich irgendwie feststellen ob der ftp-server resumed downloads unterstützt? bin für jeden tipp dankbar :)

Kommentar von Heini am 25.07.2002 um 11:24

hallo leutz...
ich find das tool echt genial, wenn man z.b einen bittet was zu senden, aber nicht in der lage sind problemlos ne ftp verbindung zu mit erstellen.. für windows xp hab ich es schon im xp design umgewandelt.. nur eine frage hab ich noch... wenn man dateien sendet, die was groß sind.. isses auch möglich nen progressbar hinzumachen, um zu sehen wie weit der transfer ist !?
mfg. Heini

Kommentar von BlaseHase am 03.07.2002 um 13:56

Zu 1 (Stephan) :
Und zwar, unter dem Link : http://www.ghcif.de/coding/sources/vb/ftpsample.zip
Ist ein Source-Code für einen Server und einen Clienten ! Viel Erfolg, der BlaseHase

Kommentar von Luet am 02.07.2002 um 12:00

Unter Win 98 + ME funzt der Tipp gut .
Aber warum läßt sich unter Win 2000 keine Verbindung aufbauen ??
Brauche dringend Hilfe!
Danke
luet

Kommentar von philip am 20.06.2002 um 21:02

Hi,
ich will den FTP-Client nutzen um Files auf meinen web-Server hochzuladen. Jedoch wird mir immer ein "Fehler beim Verbindungsaufbau" zurückgegeben.
Ich habe die Einstellungen mit cute-ftp geprüft ob es daran liegt. Aber da funktionierts. Kann mir dabei jemand helfen. Zur Info: Ich benutze Win 2k.
thx philip

Kommentar von Sebastian am 13.05.2002 um 16:38

Funktioniert das prog auch mit XP Professional ?? Auf meinem PC mit XP Home funzts, auf dem eines Freundes der XP Professional hat klappt es nicht, der Verbindungsaufbau kommt nicht zustande ? Woran kann das liegen ?

Kommentar von Gybrush am 20.03.2002 um 17:34

HALLO
ich möchte den speed commander als downloadmanager nutzen
Wie stelle ich eine verbindung zu einem ftp-server her um im Netz down- oder uploaden zu können?
Please, help me!
Mfg
Gybrush

Kommentar von UdoH am 28.02.2002 um 11:04

Hallo. Ich würde dieses Tool gerne zum Filetransfer im lokalem Netz bzw. über Router einbinden. Wer hat dazu eine Idee?

Kommentar von Ludger am 20.02.2002 um 00:09

Proxy, das leidige Problem. Ich programmiere dieses FTP jetzt damit es auf mehreren, mir unbekannten Rechnern läuft. Leider sind unter diesen auch Proxies - und ich habe keine Ahnung, wie mit diesen umzugehen. wer kann helfen - was gebe ich dort ein, was muss ich wissen. Was sagt mir "internes Linux-Gateway" (als PC jedoch normales NT)
Herzlichen Dank

Kommentar von Andy am 15.02.2002 um 13:13

Wer lesen kann ist klar im Vorteil, schau dir Notiz Nr.25 an, das könnte dir helfen ;)

Kommentar von AndiD am 03.02.2002 um 15:43

Ich bekomme keine Verbindung über den AVM Ken-DSL Proxy. Als Proxy hab` ich im Code folgendes angegeben:
Proxy = "ftp://192.254.92.135:2121"
Hab` ich noch was vergessen, oder woran kanns noch liegen...

Kommentar von Marc Reichelt am 01.02.2002 um 23:19

DYNAMISCHE IP-ADRESSE!!!
Hi, an alle!!!
-- Weiter unten hab ich geschrieben, dass ich meine dynamische IP immer wieder via FTP hochladen muss, doch dies erwies sich als sehr schwierig.
Wer keine Lust auf den umständlichen Kram hat, kann sich ganz einfach kostenlos (und OHNE Werbung!!!) bei www.dyndns.org anmelden.
Dort kann man auch Programme downloaden, die automatisch beim Verändern der IP die neue IP dem dyndns-server vermitteln (man muss also nach der Einwahl ins Internet nur zwei Programme starten:
Den Server und das IP-Programm.
Ich hoffe, ich konnte einigen helfen!
www.marcreichelt.de

Kommentar von Stephan am 16.01.2002 um 09:48

Ich benutze das Prog zum kommunizieren mit einer Unix-Kiste.In der Liste wird auch die Struktur der Platte Eingelesen aber ich kann mit DblClick nicht in die Unterverzeichnisse navigieren. Habe beim Debuggen festgestellt das die Schleife aufgrund FileList(List1.ListIndex).dwFileAttributes(=0) = FILE_ATTRIBUTE_DIRECTORY(=16) abgewiesen wird. Was kann ich ändern???
Danke im voraus.

Kommentar von Frank am 14.01.2002 um 16:44

Wie kann ich die Rechte für übertragene Dateien ändern? Ich schicke mit dem Progi bestimmte Dateien an eine Unix-Kiste und möchte für diese übertragenen Dateien die Schreib-, Lese- und Zugriffsrechte ändern. Unter Unix macht man das z.B. mit chmod 666. Doch wie gehts mit "wininet"? Hilfe !!! Dringend!!! Danke!!!

Kommentar von Stephan am 14.01.2002 um 12:10

Kann ich mit diesem Projekt auch mit einer Unix-Maschine kommunizieren?
Habe Adresse Name und Passwort.
Danke für die Antwort.

Kommentar von Martin am 27.12.2001 um 13:11

an DANIEL: Wegen dem Problem, dass er aus dem CACHE laedt:
Machs so dann gehts.
Public Const INTERNET_FLAG_RELOAD = &H80000000
Public Const INTERNET_FLAG_KEEP_CONNECTION = &H400000
Public Const INTERNET_FLAG_NO_CACHE_WRITE = &H4000000
Public Const INTERNET_FLAG_DONT_CACHE = INTERNET_FLAG_NO_CACHE_WRITE
Result = FTPGetFile(hConnection, sFile, dFile, True, INTERNET_FLAG_RELOAD, Transfer Or INTERNET_FLAG_DONT_CACHE, 0)
Result = FTPPutFile(hConnection, sFile, dFile, Transfer Or INTERNET_FLAG_NO_CACHE_WRITE, 0)

Kommentar von ANONYMOUs am 12.12.2001 um 22:33

Wie mache ich es, dass
die Datei "C:...1.txt"
beim Starten des Programms automatisch auf dem FTP Server gespeichert wird?

Kommentar von eclere am 28.11.2001 um 00:33

hallo,
wie kann ich denn damit einen ordner wechseln? ich bekomm das leider nicht raus.
gruss eclere

Kommentar von Robert am 23.11.2001 um 08:52

Hallo,
Kann mir jemand sagen, ob es eine relativ einfache Variante gibt Ordner inkl. Unterordner zu löschen ? Oder muß ich mich durch jeden Ordner hangeln und von der untersten Ebene anfangen die Ordner/Dateien zu löschen.
Besten Dank für die Antworten.
Robert

Kommentar von Jürgen Stetter am 15.10.2001 um 12:31

Hallo!
Mit FtpFindFirstFile liste ich den Verzeichnisinhalt auf.
Da der Verzeichnisinhalt recht groß ist, gebe ich eine Filter an.
Trotzdem scheint mir, dass der Gesamte Inhalt transferiert wird und die Filterung erst später erfolgt. Die Wartezeit ist sehr groß.

Kommentar von Mathias Böttcher am 11.10.2001 um 07:29

Hat sich erledigt.
Haut prima hin (hat mich 3 Stunden gekostet).
Trotzdem danke!
Gruß
Mathias

Kommentar von Mathias Böttcher am 09.10.2001 um 15:52

Hi,
ich möchte gerne das Scrip so ändern, daß ich beim Einwählen auf dem Server in einem Unterverzeichnis, welches ich vorher festlegen will, lande.
Ich aber nicht auf die Hauptebene gelange (als Sicherheit, damit ich nicht versehendlich die aktuellen Daten lösche).
Danke für Eure Hilfe.
Gruß
Mathias

Kommentar von YuriPrime am 29.08.2001 um 13:27

Hi, ich schaffe es nich, dass ich es über Proxy (Jana 1) zum laufen bringe... :(
'### Für den Proxybetrieb
Proxy = "...."
hOpen = InternetOpen(FTP_UAgent, INTERNET_OPEN_TYPE_PROXY, _
Proxy, vbNullString, 0)
was muss ich schreiben, wenn mein server bsp. super heisst ?? (muss ich 1080 für socks oder 8080 für http schreiben?) ich bitte um eine antwort

Kommentar von Lars Schröder am 18.08.2001 um 20:27

Ich finde das beispiel ist gelungen !
Leider blockiert das System in der Routine
bis der File runtergeladen ist. Schade ! Wer hat da eine Lösung.
Gruss Lars
Private Sub GetFile(ByVal fDir$, ByVal fFile$, ByVal lFile$)
Dim Result&
Dim NumberOfBytes&
lFile = lFile & "/" & fFile
Call chFDir(fDir)
MousePointer = vbHourglass
StatusText ("Lade Datei...")
Result = FtpGetFile(hConnection, fFile, lFile, 0, _
INTERNET_FLAG_RELOAD, Transfer, 0)
Call GetStatus
MousePointer = vbDefault
If Result = 0 Then MsgBox ("Übertragunsfehler")
End Sub

Kommentar von Guido Fischer am 03.08.2001 um 18:30

@Marc Reichelt
Tolle Idee :-) Läuft bei mir schon seit über einem Jahr erfolgreich auf jetzt 4 Domains ;o)
Ich hab noch einen drauf gesetzt ... ich kann meine Adressen Termine und meinen Anrufbeantworter so wie Faxe übers Internet abrufen *gg*
@Programmer
Geil! Den Source tu ich mir genauer an denn das Inet Steuerelement hab ich gerade ARG verflucht.
Gruß, Guido

Kommentar von Andreas am 03.08.2001 um 09:51

Ich bekomm unter NT4 SP6 keinen Connect zum FTP-Server, unter 2000 ist das kein Problem. Was muss ich machen, damit das auch unter NT4 laeuft ?

Kommentar von tom meier am 31.07.2001 um 12:06

das bsp. fand ich sehr hilfreich und erspart mir viel arbeit! hier noch ein tip:
falls avm ken als proxy im netz läuft, muß man port 2121 beim proxy einstellen. z.Bsp.: Proxy = "ftp=ftp://192.168.0.98:2121"

Kommentar von Marc Reichelt am 11.07.2001 um 17:00

Hallo an alle!
Ich habe vor kurzem ein FTP-Server-Programm (namens Personal FTP) auf meinem Programm installiert, habe allerdings eine dynamische IP und ich bin auch nicht die ganze Zeit online.
Die Aufgabe, die IP jedes Mal erneut dem Benutzer mitzuteilen, habe ich ganz elegant gelöst:
Ich habe einfach ein kleines Prog mit einem Inet-Control geschrieben, das jede Minute die IPs abfragt.
Sobald die dynamische Internet-IP existiert, nimmt er diese, schreibt sie in eine Datei "IP.txt" auf dem Computer und läd sie via FTP an einen festen Webspace von mir (in diesem Fall Tripod).
Danach startet es automatisch meinen FTP-Server per Shell-Funktion.
Das Prog funzt schon komplett, bis auf eine kleine Sache:
Die Datei IP.txt wird anscheinend nicht hochgeladen!!!
Ich wäre sehr dankbar für die Lösung des Problems, auf Anfrage kann ich auch den Sourcecode zuschicken.
Wenn das Problem gelöst ist, werde ich das Programm weiter verbessern, sodass man vor dem Ausloggen nur noch einen Button drücken muss, und schon wird eine neue Datei IP.txt hochgeladen, in der allerdings steht, dass der Server momentan nicht erreichbar ist.

Kommentar von Visual Sonic am 03.07.2001 um 11:15

Inet-Cache
läßt sich variabel per Parameter einstellen:
- RemoteCache y/n
- LocalCache y/n
- Sizes...
schaut in die MSDN Library !

Kommentar von Visual Sonic am 03.07.2001 um 11:12

"Dynamische IP" und FPT Server
nichts einfacher als das: da private Leute oftmals kaum eine statische IP zur Verfügung haben und doch einen Serverbetrieb haben möchten, gibt es einen kleinen Trick: die dynamische IP muß umgewandelt werden (translated). Aus der Nummernfolge machen wir einen String, der immer gleich bleibt (registriert) und sich damit leicht merken läßt. Deine dynamische IP muß bei jedem Neustart einer DFÜ-Session diesem String seine Identät erzählen (update). Super einfache Services erleichtern das - ohne große Kenntnisse. Melde Dich bei http://www.dyndns.org/ an ... und DL Dir das kleine Programm, das bei jeder neuen DFÜ-Session dort Deine IP einträgt.
Demnach gibst Du dem User nur Deine dnydns.org URL. Er wird automatisch auf Deinen "virtuellen Server" verbunden.

Kommentar von Daniel am 18.06.2001 um 12:44

TOLL, wie schnell man hilfe bekommt hier !!!!

Kommentar von Goetz Reinecke am 18.06.2001 um 10:59

Hallo Daniel, ja das wäre nett, dann wäre es endlich einmal dokumentiert, ich komme leider nicht dazu, danke. Schicks einfach an meine Email.
Grüße
Götz

Kommentar von Goetz Reinecke am 18.06.2001 um 10:57

Hallo Daniel, ja das ist in der Tat ein Problem. Die Wininet cached die Daten für ca. 30 Minuten. Sie holt in dieser Zeit nicht die geänderten Daten sondern das was sie im Cache findet. Habe bis jetzt noch keine konkrete Lösung dafür gefunden. Nehme aber an, daß sich das über irgendein Flag lösen läßt, bzw. es eine Funktion in der Wininet gibt um dieses Cache zurückzusetzen
Grüße
Götz

Kommentar von Daniel am 18.06.2001 um 10:54

Noch was , ich hab den Code "studiert" und alles beschriftet, soweit ich konnte, ich kann es gerne jedem schicken, müsst nur ne Mail schreiben !!!!!

Kommentar von Daniel am 18.06.2001 um 10:51

Hallo Ihr!! SUPER SITE !!!
aber nun mein problem :
ich habe eine TXT Datei auf meine PC erstellt, in der steht z.b. "HALLO VB PROGRAMMER", die schicke ich auf den Server. Dann lösche ich die Datei Lokal, und lade sie wieder herunter. Jetzt das komische, wenn ich in die Datei nun "GEHT NICHT" schreibe, und das gleiche nochmal mache, und sie dann anschaue, steht "HALLO VB PROGRAMMER" in der TXT Datei, egal ob ich sie gelöscht hab Lokal, oder auch auf dem Server, bei jedem erneuten Download dieser Datei steht, egal was ich nun hineinschreibe, "HALLO VB PROGRAMMER" drinnen !!!
Die Datei wird glaub ich sowas wie im Buffer gespeichert, kann man dieses Problem irgendwie lösen ?????
Danke im voraus !!!

Kommentar von Philipp Stephani am 05.05.2001 um 22:10

Findet Ihr nicht, dass dieser Code etwas lang ist? Man kann ihn zwar verwenden, aber hat überhaupt nicht verstanden, was die Befehle bedeuten! Ein paar Kommentar wären auch nicht schlecht.

Kommentar von Adrian Föder am 29.04.2001 um 14:30

Warum setzt ihr nicht die msinet.ocx als Control ein, d.h. ihr nehmt den Sau-komplizierten API-Verweis.
Das ist zwar ganz schön für die, die sich das Ding runterladen, eine EXE draus machen und sagen "Ich habe einen eigenen FTP-Client gemacht".
Aber um die Funktionsweise nachzuvollziehen ist das ziemlich Sch***..
Ist übrigens bei allen Euren Projekten so...
Gruss,
Adrian

Kommentar von daniel am 26.04.2001 um 13:29

hallo, kann ich auch durch eine firewall uebertragen?
wenn ja, wie?
danke.

Kommentar von jameskirk am 06.04.2001 um 15:02

Hätte da mal ne frage: wie kann ich es als option realisieren alle unterverzeichnisse mitzukopieren! Für lösungsansätze wär ich sehr dankbar...
mfg

Kommentar von FrankD am 04.04.2001 um 09:12

Tolles Tool und fast alles funktioniert, nur beim FTP-File löschen habe ich probleme. Ich möchte alle Dateien in einem FTP-Verzeichnis löschen, aber ich kann immer nur die 1. löschen. Muß ich etwa nach jedem einzelnen FTPöschvorgang das verzeichnis komplett neu einlesen, um dann die nächste Datei löschen zu dürfen???

Kommentar von ToXic Lord am 14.03.2001 um 21:45

Ihr seid witzig! Wie lange hat man an einer Linux installation? Paar Stunden! Und wie glaubt ihr denn, dass ein 15 jähriger (ok, 15 is nicht wichtig..), der kaum VB kann, sich gleich mit stmp, ftp und www-diensten auskennt?

Kommentar von Franz Rieder am 26.02.2001 um 11:58

Wie kann ich jetzt in ein bestimmtes Verzeichnis auf dem FTP-Server wechseln?

Kommentar von LuniX am 24.01.2001 um 14:38

StephanG, du kannst aber auch einen Sambar/Apache Server auf deinem Win32 (Windows 95/...) installieren und den als Webserver laufen lassen. Im Web ne weiterleitung auf deine änderende IP (mach ich mit einlog- und auslog-Perlskript (ändert jedesmal die index.html auf eine andere IP /ausweichandere fals nicht Online)... :-)

Kommentar von Robert K am 03.01.2001 um 15:08

I was looking for info about Wininet.dll. Many thanks!
Robert

Kommentar von Ralf Klinkert am 19.12.2000 um 10:36

Hallo Zusammen,
Ich kenne mich mit der API noch nicht so richtig aus und möchte gerne ein Verzeichnis auf dem FTP-Server angeben um mich mit dem Client direkt dahin zu verbinden. An welcher Stelleim Programm kann ich so etwas eintragen? Vielen Dank im Voraus!
Gruß Ralf

Kommentar von Sven Strickroth am 07.12.2000 um 14:46

Hi!
Ich suche eine VB-Quellcode, den man als FTP-Server nutzen kann.
Also nur ein Skript, dass die ankommenden FTP anfragen annimmt und dann auswertet (Benutzernamen prüft und dann Ordner freigibt.).

Kommentar von noname am 15.11.2000 um 16:06

Hallo StephanG,
installier auf einem 2. Rechner SuSE Linux 7.0 - Dort ist der Apache HTTP Server installiert.
Ohne große Vorkenntnisse kannst du dort eine Seite einbinden.
P.S. FTP hast du ebenso wie SMTP Funktionen
CU noname

Kommentar von j.jaballah am 05.10.2000 um 08:26

Hallo,
Mit diesem Tip habe ich die erste Erfahrung mit wininet.dll und FTP gewonnen und dabei hat sich bei mir die erste Frage gestellt und zwar wie kann ich via FtpPutFile(...) oder FtpCommand(...) von einem lokalen Rechner Client_1 eine lokale Datei loclFile_1 an eine remote Datei remoteFile_1 anhengen, remoteFile_1 ist auf einem Remote-Server
remoteServer_1?
Von dem Remote-Server habe ich die IP-Adresse und habe für einem bestimmten alle
Rechte (Die Remote-Datei möchte ich von vielen Clients benutzen lassen).
Gruß
J.J

Kommentar von Götz Reinecke am 30.09.2000 um 23:13

Hallo Stephan,
prinzipiell geht das, Du kannst dies zum Bsp. über die Winsock realiesieren.
Problematisch ist nur, daß wenn Du auch erreichbar sein willst, Du eine statische IP-Adresse brauchst, unter der andere Deinen Server erreichen können.
Hast Du diese nicht, mußt Du allen Interessenten bei jeder neuer Einwahl Deine IP mitteilen.

Kommentar von StephanG am 30.09.2000 um 23:00

Hallo! Bin 15 und heiße Stephan! ich möchte gerne meinen Computer als Internetserver verwenden. Wie geht dass? Kann ich eine art FTP Server mit VB machen?
..und eure Seite ist die BESTE!!!! Hab viel daraus gelernt!
Danke im Voraus!