Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 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 | | Calendrier |
|
|
| FILE_FIND: Arborescence des répertoires dans un mémo | |
| | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: FILE_FIND: Arborescence des répertoires dans un mémo Jeu 31 Mai 2012 - 23:50 | |
| Petit exercice d'utilisation de FILE_FIND_FIRST, FILE_FIND_NEXT et FILE_FIND_CLOSE pour construire une liste de l'arborescence des répertoires et fichiers, à partir d'un répertoire initial. On saisit le répertoire initial dans le EDIT en haut, puis on clique sur Start. Après un temps d'attente variable selon le volume de l'arborescence, celle-ci s'affiche dans le MEMO, et en dernière ligne, on a le nombre d'éléments dans cette arborescence, qui correspond à la somme des fichiers et répertoires (à vérifier par click droit/propriétés sur le répertoire initial). Attention: ce programme montre les fichiers et répertoires cachés et système ! A partir de là, on peut placer des boutons dans le container de droite pour agir sur l'arborescence. On peut imaginer par exemple, de supprimer un fichier, d'exécuter un source Panoramic avec PANORAMIC.exe, d'exécuter un fichier *.bas directement avec mon astuce Exécution d'un script en Panoramic SANS compiler ! etc. Si l'on laisse la zone du répertoire initial vide, le programme prend l'actuel répertoire par défaut. Et si l'on fait "C:", il fait tout le disque, mais ... patience ! Voici le code: - Code:
-
label labels : gosub labels gosub constantes gosub variables gosub form0 gosub GUI gosub initialisations
end
labels: label constantes, variables label form0, GUI, initialisations label folder label iniloop, ini1 return constantes: dim maxi% : maxi% = 500 dim indent$ : indent$ = string$(100,"-") dim sfn$ : sfn$ = "C:\DOCUME~1\Klaus\MESDOC~1\ME87BB~1\SFN\SFN.exe" return
variables: dim no%, no1%, no_rep%, no_tree%, depth%, ptr%, f$, f1$, i%, d$ dim cnt%(maxi%), dir$(maxi%) return form0: caption 0,"Tree-View" width 0,1000 height 0,800 return GUI: ' invisible elements no% = no% + 1 : open_dialog no% ' sample application program objects no% = no% + 1 : container no% : no1% = no% : top no%,10 : left no%,10 width no%,950 : height no%,50 : caption no%,"Select folder" no% = no% + 1 : edit no% : parent no%,no1% : no_rep% = no% top no%,20 : left no%,10 : width no%,860 no% = no% + 1 : button no% : parent no%,no1% : top no%,17 : left no%,880 width no%, 50 : caption no%,"Start" : on_click no%,folder ' treeview objects no% = no% + 1 : container no% : no1% = no% : top no%,80 : left no%,10 width no%,700 : height no%,650 : caption no%,"Folder tree" no% = no% + 1 : list no% : parent no%,no1% : no_tree% = no% top no%,20 : left no%,10 : width no%,680 : height no%,620 font_name no%,"Courier"
' function objects
return initialisations: return folder: f$ = text$(no_rep%) if f$="" then f$ = dir_current$ dir_change f$ item_add no_tree%,"Tree "+chr$(34)+f$+chr$(34) depth% = 0 f$ = file_find_first$ dir$(0) = f$
iniloop: if f$="_" if depth%>0 depth% = depth% - 1 file_find_close dir_change ".." f$ = file_find_first$ if cnt%(depth%)>0 for i%=2 to cnt%(depth%) f$ = file_find_next$ next i% end_if goto iniloop else goto ini1 end_if end_if
cnt%(depth%) = cnt%(depth%) + 1 if dir_exists(f$)=1 depth% = depth% + 1 f1$ = "D "+left$(indent$,depth%)+f$ item_add no_tree%,f1$ cnt%(depth%) = 1 file_find_close dir_change f$+"\" dir$(depth%) = f$+"\" f$ = file_find_first$ else f1$ = " "+left$(indent$,depth%)+f$ item_add no_tree%,f1$ f$ = file_find_next$ end_if goto iniloop ini1: file_find_close item_add no_tree%,str$(count(no_tree%)-1)+" items in tree "+chr$(34)+text$(no_rep%)+chr$(34) return | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: FILE_FIND: Arborescence des répertoires dans un mémo Ven 1 Juin 2012 - 2:27 | |
| Salut Klaus. Excellente application. Toutefois, j’ai quelques éclaircissements à demander : Quelle est l’utilité de la ligne 21 : (la variable sfn$ n’est utilisée nulle part dans le programme) - Code:
-
dim sfn$ : sfn$ = "C:\DOCUME~1\Klaus\MESDOC~1\ME87BB~1\SFN\SFN.exe"
J’ai donné comme répertoire initial « c:\ », Le temps de réponse était si long que j’ai cru a un plantage. J’ai ajouté alors la modification suivante : A la 1ere ligne du sous-programme « folder : », j’ai ajouté ‘ caption 0, "Veuillez patienter" ‘ et à l’avant-dernière ligne de « init1 : », j’ai ajouté ‘caption 0,"TERMINE" ‘ Si après avoir affiché une arborescence d’un répertoire quelconque, on désire afficher une autre arborescence d’un autre répertoire, l’affichage se fait à la suite. Il est plus commode que l’affichage se fait sur une liste vierge. J’ai ajouté un sous-programme ‘Vide_list :’ Ainsi chaque répertoire sera affiché dans une liste vierge. Voici le code modifié : les lignes ajoutées sont suivies de ‘ Ajouté par papydall - Code:
-
label labels : gosub labels gosub constantes gosub variables gosub form0 gosub GUI gosub initialisations
end
labels: label constantes, variables label form0, GUI, initialisations label folder label iniloop, ini1 LABEL vide_list : ' Ajouté par papydall return
constantes: dim maxi% : maxi% = 500 dim indent$ : indent$ = string$(100,"-") dim sfn$ : sfn$ = "C:\DOCUME~1\Klaus\MESDOC~1\ME87BB~1\SFN\SFN.exe" return
variables: dim no%, no1%, no_rep%, no_tree%, depth%, ptr%, f$, f1$, i%, d$ dim cnt%(maxi%), dir$(maxi%) DIM lig%,maxlig% : ' Ajouté par papydall return
form0: caption 0,"Tree-View" width 0,1000 height 0,800 return
GUI: ' invisible elements no% = no% + 1 : open_dialog no%
' sample application program objects no% = no% + 1 : container no% : no1% = no% : top no%,10 : left no%,10 width no%,950 : height no%,50 : caption no%,"Select folder" no% = no% + 1 : edit no% : parent no%,no1% : no_rep% = no% top no%,20 : left no%,10 : width no%,860 no% = no% + 1 : button no% : parent no%,no1% : top no%,17 : left no%,880 width no%, 50 : caption no%,"Start" : on_click no%,folder
' treeview objects no% = no% + 1 : container no% : no1% = no% : top no%,80 : left no%,10 width no%,700 : height no%,650 : caption no%,"Folder tree" no% = no% + 1 : list no% : parent no%,no1% : no_tree% = no% top no%,20 : left no%,10 : width no%,680 : height no%,600 font_name no%,"Courier"
' function objects
return
initialisations: return
folder: caption 0, "Veuillez patienter" : ' Ajouté par papydall gosub vide_list : ' Ajouté par papydall f$ = text$(no_rep%) if f$="" then f$ = dir_current$ dir_change f$ item_add no_tree%,"Tree "+chr$(34)+f$+chr$(34) depth% = 0 f$ = file_find_first$ dir$(0) = f$
iniloop: if f$="_" if depth%>0 depth% = depth% - 1 file_find_close dir_change ".." f$ = file_find_first$ if cnt%(depth%)>0 for i%=2 to cnt%(depth%) f$ = file_find_next$ next i% end_if goto iniloop else goto ini1 end_if end_if
cnt%(depth%) = cnt%(depth%) + 1 if dir_exists(f$)=1 depth% = depth% + 1 f1$ = "D "+left$(indent$,depth%)+f$ item_add no_tree%,f1$ cnt%(depth%) = 1 file_find_close dir_change f$+"\" dir$(depth%) = f$+"\" f$ = file_find_first$ else f1$ = " "+left$(indent$,depth%)+f$ item_add no_tree%,f1$ f$ = file_find_next$ end_if goto iniloop ini1: file_find_close item_add no_tree%,str$(count(no_tree%)-1)+" items in tree "+chr$(34)+text$(no_rep%)+chr$(34) caption 0,"TERMINE" maxlig% = count(no_tree%) :' Ajouté par papydall return ' ************* ' Ajouté par papydall vide_list: lig% = count(no_tree% ) if lig% > maxlig% then maxlig% = lig%
while maxlig% > 0 item_delete no_tree%,maxlig% maxlig% = maxlig% -1 end_while
return
Qu’en penses-tu ? | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: FILE_FIND: Arborescence des répertoires dans un mémo Ven 1 Juin 2012 - 3:00 | |
| Si on donne un nom de répertoire bidon (comme par exemple : aaaaaaaaaaaaaaa) qui n’existe pas, le programme affiche le contenu du répertoire courant mais en mentionnant qu’il s’agit du répertoire aaaaaaaaaaaaaaa. Un test sur le nom du répertoire est donc recommandé. Mais il est tard. | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: +++ Ven 1 Juin 2012 - 5:17 | |
| Alors là, klaus, je te le dis tout net, c'est carrément fabuleux ! Bravo !!! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: FILE_FIND: Arborescence des répertoires dans un mémo Ven 1 Juin 2012 - 7:27 | |
| Oui, vraiment très bien. Seul petit commentaire, tu aurais pu utiliser un "browser" pour choisir le répertoire d'origine, mais bon, ce n'était pas le but de ton programme par contre, il faut penser à monter maxi (perso, j'ai mis 5000 pour éviter l'index overflow) | |
| | | ambroise
Nombre de messages : 264 Localisation : Haute-Savoie Date d'inscription : 29/04/2012
| Sujet: Re: FILE_FIND: Arborescence des répertoires dans un mémo Ven 1 Juin 2012 - 9:55 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: FILE_FIND: Arborescence des répertoires dans un mémo Ven 1 Juin 2012 - 11:27 | |
| @Papydall: Merci pour tes commentaires. J'ai repris ton idée, mais j'ai simplifié l'effacement- en effet, il suffit de faire un CLEAR du mémo. Et j'ai fait un message d'attente plus technique. La variable SFN$ est un résidu de tests, et elel a été supprimée. @Jicehel: J'ai intégré ton idée du maxi à 5000. Ceci dit, c'est dans la section des "constantes" que chacun peut adapter à ces besoins. Voici ce que ça donne, avec mes remerciements à tous: - Code:
-
label labels : gosub labels gosub constantes gosub variables gosub form0 gosub GUI gosub initialisations
end
labels: label constantes, variables label form0, GUI, initialisations label folder label iniloop, ini1 return
constantes: dim maxi% : maxi% = 5000 dim indent$ : indent$ = string$(100,"-") return
variables: dim no%, no1%, no_rep%, no_tree%, depth%, ptr%, f$, f1$, i%, d$ dim cnt%(maxi%), dir$(maxi%) dim no_wait% return
form0: caption 0,"Tree-View" width 0,1000 height 0,800 return
GUI: ' invisible elements no% = no% + 1 : open_dialog no%
' sample application program objects no% = no% + 1 : container no% : no1% = no% : top no%,10 : left no%,10 width no%,950 : height no%,50 : caption no%,"Select folder" no% = no% + 1 : edit no% : parent no%,no1% : no_rep% = no% top no%,20 : left no%,10 : width no%,860 no% = no% + 1 : button no% : parent no%,no1% : top no%,17 : left no%,880 width no%, 50 : caption no%,"Start" : on_click no%,folder
' treeview objects no% = no% + 1 : container no% : no1% = no% : top no%,80 : left no%,10 width no%,700 : height no%,650 : caption no%,"Folder tree" no% = no% + 1 : list no% : parent no%,no1% : no_tree% = no% top no%,20 : left no%,10 : width no%,680 : height no%,600 font_name no%,"Courier"
' function objects no% = no% + 1 : container no% : no1% = no% : top no%,80 : left no%,710 width no%,250 : height no%,650 : caption no%,"Functions"
' message d'attente no% = no% + 1 : form no% : hide no% : no_wait% = no% : inactive no% top no%,300 : left no%,300 : height no%,150 : width no%,300 caption no%,"TRaitement en cours..." no% = no% + 1 : alpha no% : parent no%,no_wait% : top no%,70 : left no%,10 caption no%,"Veuillez patienter..." : font_color no%,255,0,0 font_bold no% : font_italic no% : font_size no%,16
return
initialisations: return
folder: inactive 0 show no_wait% clear no_tree% f$ = text$(no_rep%) if f$="" then f$ = dir_current$ if dir_exists(f$)=0 then f$ = dir_current$ dir_change f$ item_add no_tree%,"Tree "+chr$(34)+f$+chr$(34) depth% = 0 f$ = file_find_first$ dir$(0) = f$
iniloop: if f$="_" if depth%>0 depth% = depth% - 1 file_find_close dir_change ".." f$ = file_find_first$ if cnt%(depth%)>0 for i%=2 to cnt%(depth%) f$ = file_find_next$ next i% end_if goto iniloop else goto ini1 end_if end_if
cnt%(depth%) = cnt%(depth%) + 1 if dir_exists(f$)=1 depth% = depth% + 1 f1$ = "D "+left$(indent$,depth%)+f$ item_add no_tree%,f1$ cnt%(depth%) = 1 file_find_close dir_change f$+"\" dir$(depth%) = f$+"\" f$ = file_find_first$ else f1$ = " "+left$(indent$,depth%)+f$ item_add no_tree%,f1$ f$ = file_find_next$ end_if goto iniloop ini1: file_find_close item_add no_tree%,str$(count(no_tree%)-1)+" items in tree "+chr$(34)+text$(no_rep%)+chr$(34) hide no_wait% active 0 to_foreground 0 return
| |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: FILE_FIND: Arborescence des répertoires dans un mémo Ven 1 Juin 2012 - 12:23 | |
| Ça, c’est du Super Klaus ! Maitre, B R A V O. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: FILE_FIND: Arborescence des répertoires dans un mémo Ven 1 Juin 2012 - 14:10 | |
| Bravo Klaus, bel explorateur et bel exercice de style. Manquent plus que les options affichage des tailles, dates de création ou modification, attributs... Je plaisante (un peu seulement), mais pour les attributs par exemple on a toutes les fonctions pour les modifier (on ou off), mais rien pour les lire, c'est un peu absurde ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: FILE_FIND: Arborescence des répertoires dans un mémo Ven 1 Juin 2012 - 14:15 | |
| Exact, JL35. J'aimerais bien afficher les attrbuts et, pourquoi filtrer par ça, mais... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: FILE_FIND: Arborescence des répertoires dans un mémo Ven 1 Juin 2012 - 14:28 | |
| On peut les avoir par des fonctions Dos (fonction ATTRIB), mais c'est moins élégant. Et tout de même regrettable qu'on ne les ait pas en panoramic alors qu'on peut les modifier. J'ai un truc bizarre avec un de mes répertoires (et ton programme): la 1ère fois il affiche deux fois le 1er sous-répertoire trouvé et son contenu, puis la suite normalement (434 items), et si je relance (Start) il s'arrête chaque fois à la fin de ce même sous-répertoire (10 items) ? 1ère fois: etc.2ème fois (re-appui sur 'Start') et suivantes: | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: FILE_FIND: Arborescence des répertoires dans un mémo Ven 1 Juin 2012 - 15:30 | |
| @JL35: J'ai eu ce problème ce matin. As-tu chargé la dernière version ? En tout cas, voici une version qui compte séparément les répertoires et les fichiers, et le message d'attente est mieux placé: - Code:
-
label labels : gosub labels gosub constantes gosub variables gosub form0 gosub GUI gosub initialisations
end
labels: label constantes, variables label form0, GUI, initialisations label folder label iniloop, ini1 return
constantes: dim maxi% : maxi% = 5000 dim indent$ : indent$ = string$(100,"-") return
variables: dim no%, no1%, no_rep%, no_tree%, depth%, ptr%, f$, f1$, i%, d$ dim cnt%(maxi%), dir$(maxi%) dim no_wait%, n_file%, n_folder% return
form0: caption 0,"Tree-View" width 0,1000 height 0,800 return
GUI: ' invisible elements no% = no% + 1 : open_dialog no%
' sample application program objects no% = no% + 1 : container no% : no1% = no% : top no%,10 : left no%,10 width no%,950 : height no%,50 : caption no%,"Select folder" no% = no% + 1 : edit no% : parent no%,no1% : no_rep% = no% top no%,20 : left no%,10 : width no%,860 no% = no% + 1 : button no% : parent no%,no1% : top no%,17 : left no%,880 width no%, 50 : caption no%,"Start" : on_click no%,folder
' treeview objects no% = no% + 1 : container no% : no1% = no% : top no%,80 : left no%,10 width no%,700 : height no%,650 : caption no%,"Folder tree" no% = no% + 1 : list no% : parent no%,no1% : no_tree% = no% top no%,20 : left no%,10 : width no%,680 : height no%,600 font_name no%,"Courier"
' function objects no% = no% + 1 : container no% : no1% = no% : top no%,80 : left no%,710 width no%,250 : height no%,650 : caption no%,"Functions"
' message d'attente no% = no% + 1 : form no% : hide no% : no_wait% = no% : inactive no% top no%,300 : left no%,300 : height no%,150 : width no%,300 caption no%,"TRaitement en cours..." no% = no% + 1 : alpha no% : parent no%,no_wait% : top no%,40 : left no%,10 caption no%,"Veuillez patienter..." : font_color no%,255,0,0 font_bold no% : font_italic no% : font_size no%,16
return
initialisations: return
folder: inactive 0 show no_wait% pause 1 clear no_tree% n_file% = 0 : n_folder% = 0 f$ = text$(no_rep%) if f$="" then f$ = dir_current$ if dir_exists(f$)=0 then f$ = dir_current$ dir_change f$ item_add no_tree%,"Tree "+chr$(34)+f$+chr$(34) depth% = 0 f$ = file_find_first$ dir$(0) = f$
iniloop: if f$="_" if depth%>0 depth% = depth% - 1 file_find_close dir_change ".." f$ = file_find_first$ if cnt%(depth%)>0 for i%=2 to cnt%(depth%) f$ = file_find_next$ next i% end_if goto iniloop else goto ini1 end_if end_if
cnt%(depth%) = cnt%(depth%) + 1 if dir_exists(f$)=1 depth% = depth% + 1 f1$ = "D "+left$(indent$,depth%)+f$ item_add no_tree%,f1$ n_folder% = n_folder% + 1 cnt%(depth%) = 1 file_find_close dir_change f$+"\" dir$(depth%) = f$+"\" f$ = file_find_first$ else f1$ = " "+left$(indent$,depth%)+f$ item_add no_tree%,f1$ n_file% = n_file% + 1 f$ = file_find_next$ end_if goto iniloop ini1: file_find_close item_add no_tree%,str$(n_folder%)+" folders and "+str$(n_file%)+" files in tree "+chr$(34)+text$(no_rep%)+chr$(34) hide no_wait% active 0 to_foreground 0 return
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: ctement même phénomène Ven 1 Juin 2012 - 15:42 | |
| J'ai bien pris la dernière version, mais j'essaie celle-ci, un moment stp. Désolé, c'est pareil, sauf que j'ai un affichage en plus pour patienter... Exactement le même phénomène, doublon la 1ère fois, affichage tronqué à la fin du 1er répertoire les fois suivantes.
J'ai essayé sur un autre répertoire, pareil: - doublage du 1er sous-répertoire rencontré (mais pas les autres). - au deuxième passage (re Start sans rien changer d'autre), arrêt à la fin du 1er sous-répertoire. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: FILE_FIND: Arborescence des répertoires dans un mémo Ven 1 Juin 2012 - 18:17 | |
| C'est très bizarre. Je n'arrive pas à le reproduire chez moi. Je l'ai fait marcher sur "C:\documents and settings". Tout se passe bien, sans doublons, et voici la dernière ligne: Es-tu certain de ne pas avoir un problème avec la structure des répertoires ? | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: FILE_FIND: Arborescence des répertoires dans un mémo Ven 1 Juin 2012 - 18:26 | |
| Ben.. je suis sous W7, ce sont des répertoires tout à fait ordinaires qui ne me posent aucun problème soit sous l'explorateur windows, soir sous Dos (commande DIR). Ne te tracasse pas pour ça, je regarderai tout à l'air un peu plus avant dans ton code pour voir où ça commence à dérailler (en mettant éventuellement des points de contrôle). Je suis mieux placé que toi pour ça puisque c'est chez moi que ça déconne. Là il va être l'heure de faire une pause... Bon, j'arrive à le reproduire: Je crée de toutes pièces un répertoire c:\test avec deux sous-répertoires (3lorem et 4lorem), et avec le même fichier texte partout sous des noms différents, et j'obtiens: le 1er sous-répertoire (3lorem) est bien répété deux fois. Et il est compté deux fois, et ses fichiers aussi. Si je refais start, il n'y a plus que le premier. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: FILE_FIND: Arborescence des répertoires dans un mémo Ven 1 Juin 2012 - 19:34 | |
| Je confirme chez moi JL35, ça fait pareil, le premier fichier s'affiche, puis le premier répertoire s'affiche 2 fois aussi avec son contenu puis la suite s'affiche au premier lancement. La seconde fois, je n'ai que le premier fichier et le premier répertoire avec son contenu | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: FILE_FIND: Arborescence des répertoires dans un mémo Ven 1 Juin 2012 - 20:21 | |
| Bonsoir Jicehel, tu me rassures. Bon, puisqu'on peut le reproduire, la balle est dans le camp de Klaus (on se croirait à Roland Garros). Juste un petit programme pour créer la structure de test (C:\Test) pour faire gagner du temps à Klaus : - Code:
-
DIR_MAKE "C:\Test": DIR_MAKE "C:\Test\Rep1": DIR_MAKE "C:\Test\Rep2" FILE_OPEN_WRITE 1,"C:\Test\Fic1.txt": FILE_WRITELN 1,"abc": FILE_WRITELN 1,"123": FILE_CLOSE 1 FILE_COPY "C:\Test\Fic1.txt","C:\Test\Fic2.txt" FILE_COPY "C:\Test\Fic1.txt","C:\Test\ZFic7.txt" FILE_COPY "C:\Test\Fic1.txt","C:\Test\Rep1\Fic3.txt" FILE_COPY "C:\Test\Fic1.txt","C:\Test\Rep1\Fic4.txt" FILE_COPY "C:\Test\Fic1.txt","C:\Test\Rep2\Fic5.txt" FILE_COPY "C:\Test\Fic1.txt","C:\Test\Rep2\Fic6.txt" TERMINATE | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: FILE_FIND: Arborescence des répertoires dans un mémo Ven 1 Juin 2012 - 20:54 | |
| Merci, JL35, pour tes efforts. Je vais regarder cela de suite. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: FILE_FIND: Arborescence des répertoires dans un mémo Ven 1 Juin 2012 - 21:06 | |
| Efforts, non, c'est un plaisir. Intéressé même. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: FILE_FIND: Arborescence des répertoires dans un mémo Ven 1 Juin 2012 - 21:41 | |
| J'ai trouvé. Deux erreurs sur les indices... Voilà la version corrigée: - Code:
-
label labels : gosub labels gosub constantes gosub variables gosub form0 gosub GUI gosub initialisations
end
labels: label constantes, variables label form0, GUI, initialisations label folder label iniloop, ini1 return
constantes: dim maxi% : maxi% = 5000 dim indent$ : indent$ = string$(100,"-") return
variables: dim no%, no1%, no_rep%, no_tree%, depth%, ptr%, f$, f1$, i%, d$ dim cnt%(maxi%), dir$(maxi%) dim no_wait%, n_file%, n_folder% return
form0: caption 0,"Tree-View" width 0,1200 height 0,800 return
GUI: ' invisible elements no% = no% + 1 : open_dialog no%
' sample application program objects no% = no% + 1 : container no% : no1% = no% : top no%,10 : left no%,10 width no%,950 : height no%,50 : caption no%,"Select folder" no% = no% + 1 : edit no% : parent no%,no1% : no_rep% = no% top no%,20 : left no%,10 : width no%,860 no% = no% + 1 : button no% : parent no%,no1% : top no%,17 : left no%,880 width no%, 50 : caption no%,"Start" : on_click no%,folder
' treeview objects no% = no% + 1 : container no% : no1% = no% : top no%,80 : left no%,10 width no%,900 : height no%,650 : caption no%,"Folder tree" no% = no% + 1 : list no% : parent no%,no1% : no_tree% = no% top no%,20 : left no%,10 : width no%,880 : height no%,600 font_name no%,"Courier"
' function objects no% = no% + 1 : container no% : no1% = no% : top no%,80 : left no%,910 width no%,250 : height no%,650 : caption no%,"Functions"
' message d'attente no% = no% + 1 : form no% : hide no% : no_wait% = no% : inactive no% top no%,300 : left no%,300 : height no%,150 : width no%,300 caption no%,"Traitement en cours..." no% = no% + 1 : alpha no% : parent no%,no_wait% : top no%,40 : left no%,10 caption no%,"Veuillez patienter..." : font_color no%,255,0,0 font_bold no% : font_italic no% : font_size no%,16
return
initialisations: text no_rep%,"C:\test" return
folder: inactive 0 show no_wait% pause 1 clear no_tree% n_file% = 0 : n_folder% = 0 f$ = text$(no_rep%) if f$="" then f$ = dir_current$ if dir_exists(f$)=0 then f$ = dir_current$ dir_change f$ item_add no_tree%,"Tree "+chr$(34)+f$+chr$(34) depth% = 0 f$ = file_find_first$ dir$(0) = f$ cnt%(0) = 0 iniloop: if f$="_" if depth%>0 depth% = depth% - 1 file_find_close dir_change ".." f$ = file_find_first$ if cnt%(depth%)>0 for i%=1 to cnt%(depth%) f$ = file_find_next$ next i% end_if goto iniloop else goto ini1 end_if end_if cnt%(depth%) = cnt%(depth%) + 1 if dir_exists(f$)=1 depth% = depth% + 1 f1$ = "D "+left$(indent$,depth%)+f$ item_add no_tree%,f1$ n_folder% = n_folder% + 1 cnt%(depth%) = 0 file_find_close dir_change f$+"\" dir$(depth%) = f$+"\" f$ = file_find_first$ else f1$ = " "+left$(indent$,depth%)+f$ item_add no_tree%,f1$ n_file% = n_file% + 1 f$ = file_find_next$ end_if goto iniloop ini1: file_find_close item_add no_tree%,str$(n_folder%)+" folders and "+str$(n_file%)+" files in tree "+chr$(34)+text$(no_rep%)+chr$(34) hide no_wait% active 0 to_foreground 0 return
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: FILE_FIND: Arborescence des répertoires dans un mémo Ven 1 Juin 2012 - 21:56 | |
| A première vue ça semble parfait maintenant, merci Klaus ! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: FILE_FIND: Arborescence des répertoires dans un mémo Ven 1 Juin 2012 - 22:30 | |
| Presque parfait. Il reste un bug mineur. Si je rentre le chemin C:\test alors que test n'existe pas, il m'affiche bien le contenu de C:\Panoramic (répertoire courant), ok, mais par contre, il affiche à la fin: 152 folders and 8159 files in tree "C:\test" et là il y a arnaque puisque le répertoire n'existe pas et qu'il a pris le répertoire courant à la place (C'est facile à corriger, mais bon, du coup pour le moment, selon moi, ce n'est pas parfait ) | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: FILE_FIND: Arborescence des répertoires dans un mémo Ven 1 Juin 2012 - 22:41 | |
| Tu as raison, Jicehel. Voilà la correction: - Code:
-
label labels : gosub labels gosub constantes gosub variables gosub form0 gosub GUI gosub initialisations
end
labels: label constantes, variables label form0, GUI, initialisations label folder label iniloop, ini1 return
constantes: dim maxi% : maxi% = 5000 dim indent$ : indent$ = string$(100,"-") return
variables: dim no%, no1%, no_rep%, no_tree%, depth%, ptr%, f$, f1$, i%, d$ dim cnt%(maxi%), dir$(maxi%) dim no_wait%, n_file%, n_folder%, rep$ return
form0: caption 0,"Tree-View" width 0,1200 height 0,800 return
GUI: ' invisible elements no% = no% + 1 : open_dialog no%
' sample application program objects no% = no% + 1 : container no% : no1% = no% : top no%,10 : left no%,10 width no%,950 : height no%,50 : caption no%,"Select folder" no% = no% + 1 : edit no% : parent no%,no1% : no_rep% = no% top no%,20 : left no%,10 : width no%,860 no% = no% + 1 : button no% : parent no%,no1% : top no%,17 : left no%,880 width no%, 50 : caption no%,"Start" : on_click no%,folder
' treeview objects no% = no% + 1 : container no% : no1% = no% : top no%,80 : left no%,10 width no%,900 : height no%,650 : caption no%,"Folder tree" no% = no% + 1 : list no% : parent no%,no1% : no_tree% = no% top no%,20 : left no%,10 : width no%,880 : height no%,600 font_name no%,"Courier"
' function objects no% = no% + 1 : container no% : no1% = no% : top no%,80 : left no%,910 width no%,250 : height no%,650 : caption no%,"Functions"
' message d'attente no% = no% + 1 : form no% : hide no% : no_wait% = no% : inactive no% top no%,300 : left no%,300 : height no%,150 : width no%,300 caption no%,"Traitement en cours..." no% = no% + 1 : alpha no% : parent no%,no_wait% : top no%,40 : left no%,10 caption no%,"Veuillez patienter..." : font_color no%,255,0,0 font_bold no% : font_italic no% : font_size no%,16
return
initialisations: return
folder: inactive 0 show no_wait% pause 1 clear no_tree% n_file% = 0 : n_folder% = 0 f$ = text$(no_rep%) if f$="" then f$ = dir_current$ if dir_exists(f$)=0 then f$ = dir_current$ dir_change f$ item_add no_tree%,"Tree "+chr$(34)+f$+chr$(34) rep$ = f$ depth% = 0 f$ = file_find_first$ dir$(0) = f$ cnt%(0) = 0 iniloop: if f$="_" if depth%>0 depth% = depth% - 1 file_find_close dir_change ".." f$ = file_find_first$ if cnt%(depth%)>0 for i%=1 to cnt%(depth%) f$ = file_find_next$ next i% end_if goto iniloop else goto ini1 end_if end_if cnt%(depth%) = cnt%(depth%) + 1 if dir_exists(f$)=1 depth% = depth% + 1 f1$ = "D "+left$(indent$,depth%)+f$ item_add no_tree%,f1$ n_folder% = n_folder% + 1 cnt%(depth%) = 0 file_find_close dir_change f$+"\" dir$(depth%) = f$+"\" f$ = file_find_first$ else f1$ = " "+left$(indent$,depth%)+f$ item_add no_tree%,f1$ n_file% = n_file% + 1 f$ = file_find_next$ end_if goto iniloop ini1: file_find_close item_add no_tree%,str$(n_folder%)+" folders and "+str$(n_file%)+" files in tree "+chr$(34)+rep$+chr$(34) hide no_wait% active 0 to_foreground 0 return
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: FILE_FIND: Arborescence des répertoires dans un mémo Ven 1 Juin 2012 - 23:18 | |
| Maintenant Jicehel tu laisses Klaus tranquille, qu'il puisse réfléchir calmement à toutes les extensions du programme (affichage des tailles, dates, attributs, etc.) PS dis-donc, tu as 152 répertoires et 8159 fichiers dans ton répertoire Panoramic ??? | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: FILE_FIND: Arborescence des répertoires dans un mémo Ven 1 Juin 2012 - 23:54 | |
| @Klaus, correction validée Tu peux passer aux extensions proposées par JL35 @ JL35 oui, vraiment, j'avais préparé des trucs, mais bon, il faut savoir rester raisonnable et se contenter de faire des programmes réalistes quand on n'y consacre que quelques heures de temps en temps. | |
| | | Contenu sponsorisé
| Sujet: Re: FILE_FIND: Arborescence des répertoires dans un mémo | |
| |
| | | | FILE_FIND: Arborescence des répertoires dans un mémo | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |