Page 1 sur 1
besoin d'aide pour un code svp
Publié : lun. 02/juin/2008 11:05
par bernard13
bonjour
je travaille sur un peu programme pour copier un repertoire vers un autre emplacement sur le disque dur
pour soucis c'est maintenant de dire au programme que veux copier ce repertoire vers l'emplacement que je lui indique .
qui peux maider un peu , merci
Code : Tout sélectionner
; Mon Backup
; Version 01 by JBernard
;Constantes
Enumeration
#Fenetre_main
EndEnumeration
Enumeration
#bouton_copier
#text1
#string_0
#bouton_repertoire
#text_2
#string_1
#bouton_save
EndEnumeration
;Procedure
Procedure repertoire()
chemin$=PathRequester("Selectionner un repertoire","")
SetGadgetText(#String_0,chemin$)
EndProcedure
Procedure emplacement()
cible$=PathRequester("Selectionner un repertoire","")
SetGadgetText(#String_1,cible$)
EndProcedure
Procedure main()
If OpenWindow(#Fenetre_main,0,0,420,300,"Mon Backup",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(#Fenetre_main))
ButtonGadget(#bouton_copier,10,10,120,30,"Copier")
TextGadget(#text1,10,50,150,30,"Indiquez le repertoire à copier : ",#PB_Text_Center)
StringGadget(#String_0,10,80,200,20,"")
ButtonGadget(#bouton_repertoire,220,80,130,20,"Repertoire")
TextGadget(#text_2,10,120,170,30,"Indiquez l'emplacement du backup : ",#PB_Text_Center)
StringGadget(#string_1,10,150,200,20,"")
ButtonGadget(#bouton_save,220,150,180,20,"Selectionner l'emplacement :",#PB_Text_Center)
EndIf
EndIf
EndProcedure
main()
;Boucle du programme
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget ()
Case #bouton_repertoire: repertoire()
Case #bouton_save: emplacement()
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Fenetre_main
Quitter=#True
EndSelect
EndSelect
Until Quitter
End
Publié : lun. 02/juin/2008 11:30
par Ollivier
Houlà! Ce n'est pas si simple ni si compliqué que ça !
1) Mesurer la taille totale du répertoire original
2) Vérifier que l'espace disponible est supérieur à la taille totale du répertoire (sinon ça risque de buguer pour espace insuffisant)
3) Copier les dossiers, fichiers et sous-dossiers les uns après les autres.
Mais, le plus ludique, ce n'est pas que je te mette un code cash mais que je t'explique étape par étape, et de plus en plus vite (l'apprentissage te fait accélérer). En commençant déjà par l'étape 1.
Pour cette étape (Mesurer la taille totale du répertoire original).
Il va falloir «fouiller» le répertoire et trouver une méthode pour fouiller.
a) Est-ce que tu sais mesurer la taille d'un seul fichier ?
b) Est-ce que tu connais les structures en PB ?
c) Sais-tu comment on crée un arbre de données? (Le plus simple qu'il y ait)
Woilà ces 3 questions sont nécessaires à l'étape 1.
L'étape 2, c'est du gâteau (un If ...blabla...) et l'étape 3 peut être comprise une fois que l'étape 1 est comprise (grosses similitude).
Donc éclaire-moi un peu en répondant à ces 3 questions (a, b et c) par oui ou par non sans complexe ni quoi que ce soit (Se poser les bonnes questions sur sa propre ignorance, c'est être autodidacte).
Publié : lun. 02/juin/2008 11:46
par djmcg
Ollivier a écrit :
Mais, le plus ludique, ce n'est pas que je te mette un code cash mais que je t'explique étape par étape,
(Se poser les bonnes questions sur sa propre ignorance, c'est être autodidacte).
Salut,
Que j'aime cela...
@+
Publié : lun. 02/juin/2008 12:06
par Oliv
Ollivier a écrit :
Mais, le plus ludique, ce n'est pas que je te mette un code cash mais que je t'explique étape par étape, et de plus en plus vite (l'apprentissage te fait accélérer). En commençant déjà par l'étape 1.
Il va te manquer quelques dizaines d'étapes
Sinon Bernard13 regardes le code pour le programme de sauvegarde de Dobro, ça va t'aider
Publié : lun. 02/juin/2008 12:33
par Ollivier
@Oliv
T'es une flèche ! Faut pas pousser Mémé dans les orties dès le lundi matin...
Dix étapes... Une récursivité bien expliquée, c'est une seule étape ?!?
Publié : lun. 02/juin/2008 14:24
par bernard13
et il ce trouve ou le code de dobro ?
Publié : lun. 02/juin/2008 15:11
par Backup
bernard13 a écrit :et il ce trouve ou le code de dobro ?
bah ! oublie

Publié : lun. 02/juin/2008 15:15
par bernard13
pourquoi dobro?
Publié : lun. 02/juin/2008 15:34
par Backup
bernard13 a écrit :pourquoi dobro?
la vrais question est "pourquoi pas.."
a chaque fois que tu te pose la question "pourquoi....."
dit toi "pourquoi pas....", et je t'assure que la vie est bien plus simple

Publié : lun. 02/juin/2008 15:35
par Neosis
Bon Bernard 13 je vais te mettre sur la voie
Il suffit de savoir travailler avec la Bibliothèque : "FileSystem"
Ensuite si tu regarde bien tu as 2 fonction : CopyDirectory et CopieFile
Description issus de la doc PureBasic :
La bibliothèque FileSystem vous permet de manipuler les fichiers et répertoires de vos périphériques de sauvegarde (Lecteurs de disquettes, disques durs, etc...). Vous pourrez par exemple examiner le contenu d'un répertoire, en créer un nouveau, etc...
Si vous voulez examiner le contenu d'un répertoire commencez par la commande ExamineDirectory().
En complément de cette bibliothèque, vous pourrez manipuler des fichiers avec les commandes de la bibliothèque File.
Les commandes GetFilePart(), GetPathPart() et GetExtensionPart() de la bibliothèque Misc vous permettront de récupérer le nom, le chemin ou l'extension d'un fichier.
Maintenant que tu as les clés en mains à toi d'ouvrir la porte
J'attends que tu est fini ton code 
Publié : lun. 02/juin/2008 17:56
par Chris
Neosis a écrit :
Maintenant que tu as les clés en mains à toi d'ouvrir la porte
J'attends que tu est fini ton code 
T'es tranquille pour un bon moment, là

Publié : mar. 03/juin/2008 7:27
par Ollivier
Bernard13,
J'ai l'impression que moi-même je ne me suis pas posé les bonnes questions pour t'aider !
Je pensais que tu avais besoin de savoir comment on fouille l'ensemble des sous-dossiers d'un répoertoire. A priori, tu t'arrêtes juste à la copie de dossiers, et au fait que ce soit fait tout simplement (sans étudier le mécanisme).
Alors merci pour ta question qui, grâce à la réponse de Neosis (merci aussi) m'a fait découvrir qu'on pouvait tout copier d'un coup en une seule ligne... On n'arrête pas le progrès! Je dormirai moins [censuré] ce soir.
Ollivier
Publié : mar. 03/juin/2008 8:19
par brossden
Je pense avoir fait les modifs nécessaires pour réaliser ce que tu voulais !
Code : Tout sélectionner
; Mon Backup
; Version 01 by JBernard
;Constantes
Enumeration
#Fenetre_main
EndEnumeration
Enumeration
#bouton_copier : #text1 : #string_0 : #bouton_repertoire : #text_2 : #string_1 : #bouton_save
EndEnumeration
;Procedure
Procedure repertoire()
chemin$=PathRequester("Selectionner un repertoire","")
SetGadgetText(#string_0,chemin$)
EndProcedure
Procedure emplacement()
cible$=PathRequester("Selectionner un repertoire","")
SetGadgetText(#string_1,cible$)
EndProcedure
Procedure CopieFichier() ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Source.s = GetGadgetText(#string_0)
Cible.s = GetGadgetText(#string_1)
While StringField(Source,n,"\")>""
n+1
Wend
Rep.s = StringField(Source,n-1,"\")
Cible+Rep
If CopyDirectory(Source, Cible ,"*.*", #PB_FileSystem_Recursive|#PB_FileSystem_Force)
InfoBox("Copie des Fichiers Bien exécutée", "Info")
Else
InfoBox("La copie des fichier ne s'est pas exécutée correctement","Erreur")
EndIf
EndProcedure
Procedure main()
If OpenWindow(#Fenetre_main,0,0,420,300,"Mon Backup",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
If CreateGadgetList(WindowID(#Fenetre_main))
ButtonGadget(#bouton_copier,10,10,120,30,"Copier")
TextGadget(#text1,10,50,150,30,"Indiquez le repertoire à copier : ",#PB_Text_Center)
StringGadget(#string_0,10,80,200,20,"")
ButtonGadget(#bouton_repertoire,220,80,130,20,"Repertoire")
TextGadget(#text_2,10,120,170,30,"Indiquez l'emplacement du backup : ",#PB_Text_Center)
StringGadget(#string_1,10,150,200,20,"")
ButtonGadget(#bouton_save,220,150,180,20,"Selectionner l'emplacement :",#PB_Text_Center)
EndIf
EndIf
EndProcedure
main()
;Boucle du programme
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget ()
Case #bouton_repertoire: repertoire()
Case #bouton_save: emplacement()
Case #bouton_copier : CopieFichier() ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Fenetre_main
Quitter=#True
EndSelect
EndSelect
Until Quitter
End
Publié : mar. 03/juin/2008 17:20
par Neosis
@Brossden:
parfait ça fonctionne au poil
@Ollivier:
mes de rien