IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Transfert FTP via VB6 [Sources]


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 49
    Par défaut Transfert FTP via VB6
    Bonjour,

    voilà , je dois écrire un énieme programme de transfert de fichiers en ftp (via les fonctions de la wininet).

    j'ai l'habitude de manipuler ce genre de fonctions pour transférer des fichiers avec un masque donné et un répertoire donné, et là la difficulté (si s'en est une) , c'est que je dois transférer une arborescence complète (getfile, je dois copier en local une arbo distante).

    quelqu'un a-t-il déjà fait ce genre de chose ..

    Merci

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Par défaut
    Il te faut simplement faire une fonction recursive qui va lister tous les fichiers et ensuite tu les tranferts comme tu sais le faire.

    Voila un code extrait de ALLAPI.NET :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    'Create a form with a command button (command1), a list box (list1)
    'and four text boxes (text1, text2, text3 and text4).
    'Type in the first textbox a startingpath like c:\
    'and in the second textbox you put a pattern like *.* or *.txt
     
    Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
    Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
    Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
    Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
     
    Const MAX_PATH = 260
    Const MAXDWORD = &HFFFF
    Const INVALID_HANDLE_VALUE = -1
    Const FILE_ATTRIBUTE_ARCHIVE = &H20
    Const FILE_ATTRIBUTE_DIRECTORY = &H10
    Const FILE_ATTRIBUTE_HIDDEN = &H2
    Const FILE_ATTRIBUTE_NORMAL = &H80
    Const FILE_ATTRIBUTE_READONLY = &H1
    Const FILE_ATTRIBUTE_SYSTEM = &H4
    Const FILE_ATTRIBUTE_TEMPORARY = &H100
     
    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
    Function StripNulls(OriginalStr As String) As String
        If (InStr(OriginalStr, Chr(0)) > 0) Then
            OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
        End If
        StripNulls = OriginalStr
    End Function
     
    Function FindFilesAPI(path As String, SearchStr As String, FileCount As Integer, DirCount As Integer)
        'KPD-Team 1999
        'E-Mail: KPDTeam@Allapi.net
        'URL: http://www.allapi.net/
     
        Dim FileName As String ' Walking filename variable...
        Dim DirName As String ' SubDirectory Name
        Dim dirNames() As String ' Buffer for directory name entries
        Dim nDir As Integer ' Number of directories in this path
        Dim i As Integer ' For-loop counter...
        Dim hSearch As Long ' Search Handle
        Dim WFD As WIN32_FIND_DATA
        Dim Cont As Integer
        If Right(path, 1) <> "\" Then path = path & "\"
        ' Search for subdirectories.
        nDir = 0
        ReDim dirNames(nDir)
        Cont = True
        hSearch = FindFirstFile(path & "*", WFD)
        If hSearch <> INVALID_HANDLE_VALUE Then
            Do While Cont
            DirName = StripNulls(WFD.cFileName)
            ' Ignore the current and encompassing directories.
            If (DirName <> ".") And (DirName <> "..") Then
                ' Check for directory with bitwise comparison.
                If GetFileAttributes(path & DirName) And FILE_ATTRIBUTE_DIRECTORY Then
                    dirNames(nDir) = DirName
                    DirCount = DirCount + 1
                    nDir = nDir + 1
                    ReDim Preserve dirNames(nDir)
                End If
            End If
            Cont = FindNextFile(hSearch, WFD) 'Get next subdirectory.
            Loop
            Cont = FindClose(hSearch)
        End If
        ' Walk through this directory and sum file sizes.
        hSearch = FindFirstFile(path & SearchStr, WFD)
        Cont = True
        If hSearch <> INVALID_HANDLE_VALUE Then
            While Cont
                FileName = StripNulls(WFD.cFileName)
                If (FileName <> ".") And (FileName <> "..") Then
                    FindFilesAPI = FindFilesAPI + (WFD.nFileSizeHigh * MAXDWORD) + WFD.nFileSizeLow
                    FileCount = FileCount + 1
                    List1.AddItem path & FileName
                End If
                Cont = FindNextFile(hSearch, WFD) ' Get next file
            Wend
            Cont = FindClose(hSearch)
        End If
        ' If there are sub-directories...
        If nDir > 0 Then
            ' Recursively walk into them...
            For i = 0 To nDir - 1
                FindFilesAPI = FindFilesAPI + FindFilesAPI(path & dirNames(i) & "\", SearchStr, FileCount, DirCount)
            Next i
        End If
    End Function
    Sub Command1_Click()
        Dim SearchPath As String, FindStr As String
        Dim FileSize As Long
        Dim NumFiles As Integer, NumDirs As Integer
        Screen.MousePointer = vbHourglass
        List1.Clear
        SearchPath = Text1.Text
        FindStr = Text2.Text
        FileSize = FindFilesAPI(SearchPath, FindStr, NumFiles, NumDirs)
        Text3.Text = NumFiles & " Files found in " & NumDirs + 1 & " Directories"
        Text4.Text = "Size of files found under " & SearchPath & " = " & Format(FileSize, "#,###,###,##0") & " Bytes"
        Screen.MousePointer = vbDefault
    End Sub

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 49
    Par défaut
    Citation Envoyé par Gaël Donat
    Il te faut simplement faire une fonction recursive qui va lister tous les fichiers et ensuite tu les tranferts comme tu sais le faire.
    Merci, mais en faite , j'avais un peut la "flemme" de faire du recursif.... 8)

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 49
    Par défaut
    j'avais pas vu pour le code...

    Merci , je vais éssayer.


  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 49
    Par défaut
    bon alors forcément , ça ne fonctionne pas , car l'arborescence que je dois analyser est distante , il me faudrait un équivalent de : GetFileAttributes
    mais pour du distant.....

    Autre question ? quelqu'un connait-il la syntaxe pour vérifier que le pointeur ftp est toujours correct , ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    Public Function ConnexionFtp(AvecPositionnement As Boolean) As Boolean
    Dim lgSession As Long, lgDir As Long
    Dim blOk As Boolean
    Dim sRepDistantBase As String
     
        blOk = False
        ' Récupère un pointeur vers la connexion internet courante
     
        ConnexionFtp = False
     
        If sSens = "put" Then
            lgSession = InternetOpen("PutFtpFile", 1, vbNullString, vbNullString, 0)
            sRepDistantBase = sRepCible
        Else
            lgSession = InternetOpen("GetFtpFile", 1, vbNullString, vbNullString, 0)
            sRepDistantBase = sRepSource
        End If
        If lgSession Then
            ' Récupère un pointeur vers pour session FTP
            lgFtp = InternetConnect(lgSession, sIpDist, INTERNET_DEFAULT_FTP_PORT, _
                                    sUser, sMdp, INTERNET_SERVICE_FTP, 0, 0)
            If lgFtp Then
                If AvecPositionnement Then
                    ' Positionne le répertoire distant
                    If FtpSetCurrentDirectory(lgFtp, sRepDistantBase & "\" & g_szQuantEnCours) Then
                        ' Envoie le fichier
                        ConnexionFtp = True
                    Else
                        sMsgErreur = "Impossible de se positionner sur le répertoire distant" & sRepCible
                        'Call MakeMailErreur(sMsgErreur)
                        LeFicLog.writeline (sMsgErreur)
                    End If
                Else
                    ConnexionFtp = True
                End If
            Else
                sMsgErreur = "Impossible de Récupèrer un pointeur vers " & sIpDist & " pour session FTP"
                'Call MakeMailErreur(sMsgErreur)
                LeFicLog.writeline (sMsgErreur)
            End If
        Else
            sMsgErreur = "Impossible de Récupèrer un pointeur vers la connexion internet courante"
            'Call MakeMailErreur(sMsgErreur)
            LeFicLog.writeline (sMsgErreur)
        End If
        'Retourne le résultat
        'ConnexionFtp = blOk
    End Function

    comment tester plus loin dans le code que lgFtp fais encore référence à une connexion valide...sans remonter un pointeur ( en refaisant un FtpSetCurrentDirectory)

    Merci

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 49
    Par défaut
    bonjour,
    je reviens à la charge avec mon besoin de transfert ftp.

    j'ai résolu à peu près tous mes problemes sauf un : le plus important.

    comment avoir une lmiste éxaustive de toute l'arborescence d'un répertoire distant.

    en faite j'utilise les fonctions de la wininet , je pensais faire une fonction récursive , et donc pour ça utiliser la fonction enum qui se sert de ftpfindFirstfile et ftpfindNextFile....

    Pb : si le premier élément renvoyer est un répertoire et que je fait un setdirectory dessus ,et que je reboucle le ftpfindFirstfile ne renvoie plus rien...car apparement après un ftpfindFirstfile il faut un closehandle pour pouvoir réutiliser....je vais aps faire un closehandle et reconnexion à chaque sous rep trouvé....

    quelqu'un a-t-il un bout de code qui permet de lister toute l'arborescence d'un répertoire distant ???

    Merci

  7. #7
    Expert confirmé
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 49
    Par défaut
    Merci je regarde.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 49
    Par défaut
    bon alors en faite , j'avais pu me débrouillé avec la wininet si certains sont preneur..mais pas très propre.

    et comme j'aime faire propore , j'ai regardé tes sources thierry...:

    mais quelque soit la path indiqué ,ça ne renvoi que la liste éxaustive des fichier et répertoires se trouvant dans le repertoire de base du distant (renvoi la liste exaustive du répertoire racine du serveur ftp), mais en aucun cas , toute l'arborescence du répertoire particulier (du partage ftp)

    je vais chercher un peu avec cet objet Inet qui m'a l'air un peu plus intéressant que la wininet...

Discussions similaires

  1. Créer un dossier sur un serveur ftp via vb6
    Par shibby_ dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 27/04/2011, 12h16
  2. Transferts FTP via PHP et sécurité
    Par peephole83 dans le forum Sécurité
    Réponses: 1
    Dernier message: 24/03/2011, 14h52
  3. [OpenOffice][Tableur] Macro de transfert ftp via proxy
    Par demon74 dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 09/03/2009, 11h11
  4. [VB6] Transfert FTP via Inet
    Par Corben dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 03/07/2008, 14h29
  5. [VB.NET] transfert FTP via commande DOS
    Par HULK dans le forum Windows Forms
    Réponses: 4
    Dernier message: 21/04/2006, 16h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo