[RESOLU]ParseDirectory

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

[RESOLU]ParseDirectory

Message par omega »

Re-bonjour

@ Falsam

Ton code de parcours de répertoires marche bien

Code : Tout sélectionner

Procedure.s ParseDirectory(folder.s, id.l = 0)
  
  If Right(folder, 1) <> "\"
    folder + "\"
  EndIf
  
  If ExamineDirectory(id, folder, "*.*")
    
    While NextDirectoryEntry(id)
      
      If DirectoryEntryName(id) <> "." And DirectoryEntryName(id) <> ".."
               
        Debug folder + DirectoryEntryName(id)
                
        If DirectoryEntryType(id) = #PB_DirectoryEntry_Directory
          ParseDirectory(folder + DirectoryEntryName(id), id + 1)
        EndIf
        
      EndIf
      
    Wend
    
    FinishDirectory(id)
    
  EndIf
  
EndProcedure 

ParseDirectory("c:\windows")


Seulement voilà:
1)
Pourquoi après le code ci-dessous, le debug affiche le chemin+le nom du fichier, alors
que le test élimine seulement les dossiers nommés . ou ..? (comment sais-tu qu'il s'agit forcément d'un fichier?

Code : Tout sélectionner

 If DirectoryEntryName(id) <> "." And DirectoryEntryName(id) <> ".."
    ;Ici, on ne sait pas encore s'il s'agit d'un fichier ou d'un répertoire?? 
    Debug folder + DirectoryEntryName(id); il affiche toujours le chemin+nom de fichier
2)

Je voudrais bien utiliser ta procédure pour parcourir mes répertoires, seulement je m'embrouille un peu... je suppose que je dois tester à chaque fois après ce code:

Code : Tout sélectionner

  If DirectoryEntryType(id) = #PB_DirectoryEntry_Directory
si ce répertoire existe de l'autre côté (liste fichiers ftp)
si oui, continuer, sinon créer ce répertoire (vide)

3)

Si je comprends bien, mon sendftpfile() doit figurer ici (après le débug):
Debug folder + DirectoryEntryName(id)

Si je dis n'importe quoi dis le moi...mais j'avoue que je me perds..


Merci encore
Dernière modification par omega le jeu. 21/mars/2013 8:17, modifié 2 fois.
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: @Falsam: Ton code marche bien mais....

Message par omega »

Ehh... une petite précision:
Mes questions s'adressent à tout le monde, pas seulement à falsam...

bonne journée à tous
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: @Falsam: Ton code marche bien mais....

Message par falsam »

Un peu de commentaire et un peu de modification de code pour ce résultat.

Code : Tout sélectionner

Procedure.s ParseDirectory(folder.s, id.l = 0)
  
  If Right(folder, 1) <> "\"
    folder + "\"
  EndIf
  
  If ExamineDirectory(id, folder, "*.*") ;Examine un répertoire 
    
    While NextDirectoryEntry(id)
      
      If DirectoryEntryName(id) <> "." And DirectoryEntryName(id) <> ".."
        
        Select DirectoryEntryType(id)       
          ;C'est un dossier  
          Case #PB_DirectoryEntry_Directory 
            ;Tu dois créer ton dossier "DirectoryEntryName(id)" sur le serveur FTP
            ;Utilises la fonction CreateFTPDirectory()
            ;Puis Change le répertoire courant du Ftp avec la fonction SetFTPDirectory()
            Debug "Le Dossier " + folder + " contient le sous dossier "+ DirectoryEntryName(id)
            
            ;Maintenant nous allons scanner ce sous dossier 
            ;On fait un appel recursif à ParseDirectory()
            ParseDirectory(folder + DirectoryEntryName(id), id + 1) 
            
          ;C'est un fichier  
          Case #PB_DirectoryEntry_File 
            ;Tu dois transférer le fichier "DirectoryEntryName(id)" sur le serveur FTP
            ;Utilises SendFTPFile(#Ftp, Folder, DirectoryEntryName(id), #True ))
            Debug "Le dossier " + folder + "contient le fichier "+ DirectoryEntryName(id)
        EndSelect
        
      EndIf
      
    Wend
    
    FinishDirectory(id)
    
  EndIf
  
EndProcedure 

;Regardons ici ce que contient le répertoire racine de l'utilisateur Windows
ParseDirectory(GetHomeDirectory())
Je te laisse le soin d'ajouter les While ...EndWhile pour tester la fin d'un transfert FTP.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: @Falsam: Ton code marche bien mais....

Message par djes »

Tu pourrais changer le nom de ton sujet...? En mettant ParseDirectory par exemple....
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: @Falsam: Ton code marche bien mais....

Message par omega »

Merci falsam

Oui, c'est très bien compris maintenant... j'étais en train de tester avant de lire ta réponse
au post. J'ai quelques choses à ajouter, je te ferais signe des résultats..

merci beaucoup falsam
Tu pourrais changer le nom de ton sujet...? En mettant ParseDirectory par exemple....
Oui, absolument.. mais que veux-tu.. je tiens absolument à ce que mon ftp fonctionne tout comme ftp-expert ! POURQUOI PAS??

Bon allez... bonne continuation, (je vais manger maintenant..)
Merci pour tout
a+
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
Atlante
Messages : 337
Inscription : mer. 29/juin/2011 18:35
Localisation : Paris

Re: @Falsam: Ton code marche bien mais....

Message par Atlante »

djes a écrit :Tu pourrais changer le nom de ton sujet...? En mettant ParseDirectory par exemple....
Exactement, car là on ne sait pas de quoi tu parles.
Et si c'est pour @Falsam un MP aurait été aussi bien.
Je modifie le titre.

Cordialement,

Atlante
Modérateur
Config : Intel I5 4670K, Nvidia Geforce GTX 1060, 16go RAM, SSD 256go, DD 2000go
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: ParseDirectory

Message par omega »

Désolé encore une fois Atlande

Cordialement
Win7 (x64) 64 bits Pb 5.72
Répondre