besoin d'aide pour un code svp

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
bernard13
Messages : 1221
Inscription : mer. 05/janv./2005 21:30

besoin d'aide pour un code svp

Message 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



 


Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message 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).
djmcg
Messages : 139
Inscription : sam. 28/août/2004 6:37

Message 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... :D

@+
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message 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 :D

Sinon Bernard13 regardes le code pour le programme de sauvegarde de Dobro, ça va t'aider
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message 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 ?!?
bernard13
Messages : 1221
Inscription : mer. 05/janv./2005 21:30

Message par bernard13 »

et il ce trouve ou le code de dobro ?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

bernard13 a écrit :et il ce trouve ou le code de dobro ?
bah ! oublie :)
bernard13
Messages : 1221
Inscription : mer. 05/janv./2005 21:30

Message par bernard13 »

pourquoi dobro?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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 :)
Neosis
Messages : 113
Inscription : dim. 24/févr./2008 20:11

Message 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 ;-)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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à :lol:
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message 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
brossden
Messages : 821
Inscription : lun. 26/janv./2004 14:37

Message 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

Denis

Bonne Jounée à tous
Neosis
Messages : 113
Inscription : dim. 24/févr./2008 20:11

Message par Neosis »

@Brossden:
parfait ça fonctionne au poil :)

@Ollivier:
mes de rien :D
Répondre