Page 2 sur 2

Publié : dim. 09/janv./2005 14:40
par Apprenti
Merci, çà avance lentement...

Les anomalies que vous détectez seront elles bien répertoriées pour améliorer le produit ?


J'arrive pas lui faire renommer un dossier.
Le but étant de faire une sauvegarde incrémentale comme je le fais dans le batch donné au départ de ce fil
L'idéal serait de pouvoir les faire mémoriser plusieurs sources et de saisir dans un ecran une bonne fois le dossier destiantion et le nombre de sauvegarde

Code : Tout sélectionner

;     ******************************************
;     Sauvegarde des developpements en PureBasic 
;     ******************************************
;

;- Constante Gadget 
Enumeration
#Str_NbreSvg
EndEnumeration

; Les variables
   RepSource$ = "c:\Essai"
   RepDestination$ = "c:\Double\Essai"


Procedure Renomme()  ;    Renomme la sauvegarde précédente
Resultat = RenameFile(RepDestination$,"c:\Double\Essai02$") 
If Resultat = 0
MessageRequester("Erreur","Renommer le dossier a echoué",#PB_MessageRequester_Ok)
EndIf
EndProcedure


Procedure Svg() ;    Sauvegarde
   CreateDirectory("c:\Double\")
   CreateDirectory(RepDestination$)
   Resultat = CopyDirectory(RepSource$, RepDestination$,"*.*",#PB_FileSystem_Recursive)
   If Resultat = 0
      MessageRequester("Erreur","La sauvegarde a echouée",#PB_MessageRequester_Ok)
   Else
      If Resultat = 1
         MessageRequester("Information","Sauvegarde réussie",#PB_MessageRequester_Ok) 
      EndIf   
   EndIf
EndProcedure

; Appel des procédures
Renomme()
Svg()     

Publié : dim. 09/janv./2005 15:43
par Anonyme2
Appelles les procédure dans le bon ordre, la sauvegarde d'abord


Code : Tout sélectionner

;     ****************************************** 
;     Sauvegarde des developpements en PureBasic 
;     ****************************************** 
; 

;- Constante Gadget 
Enumeration 
#Str_NbreSvg 
EndEnumeration 


Global RepSource$, RepDestination$


Procedure Renomme()  ;    Renomme la sauvegarde précédente 
   Resultat = RenameFile(RepDestination$,"c:\Double\Essai02$") 
   If Resultat
      MessageRequester("Erreur","le dossier a été renommé",#PB_MessageRequester_Ok) 
   Else
      MessageRequester("Erreur","Renommer le dossier a echoué",#PB_MessageRequester_Ok) 
   EndIf 
EndProcedure 


Procedure Svg() ;    Sauvegarde 
   CreateDirectory("C:\Double\")
   CreateDirectory(RepDestination$)
   Resultat = CopyDirectory(RepSource$, RepDestination$,"*.*",#PB_FileSystem_Recursive) 
   If Resultat = 0 
      MessageRequester("Erreur","La sauvegarde a echouée",#PB_MessageRequester_Ok) 
   Else 
      If Resultat = 1 
         MessageRequester("Information","Sauvegarde réussie",#PB_MessageRequester_Ok) 
      EndIf    
   EndIf 
EndProcedure 

   RepSource$ = "c:\Essai" 
   RepDestination$ = "C:\Double\"+StringField(RepSource$, 2, "\")

; Appel des procédures 
Svg()     
Renomme()

Publié : dim. 09/janv./2005 16:23
par Le Soldat Inconnu
attends, j'ai dit une bétise, dans un copydirectory, faut pas que le dossier de destination existe, sinon, il ne marche pas.

tiens, regarde cet exemple, il fait exactement la même chose que ton batch
j'ai fait aucune vérif, je te laisse faire les test pour signaler une erreur dans le déroulement du programme

Code : Tout sélectionner

DossierSauvegarde.s = "C:\Test\"
Dossier.s = "C:\Program Files\PureBasic\"

; On crée le dossier de sauvegarde
CreateDirectory(DossierSauvegarde)

#NbDossierSauvegarde = 20 ; Nombre de copie de sauvegarde

; On supprime le dernier dossier de sauvegarde donc le #NbDossierSauvegarde
DeleteDirectory(DossierSauvegarde + RSet(Str(#NbDossierSauvegarde), 2, "0") + "\", "*.*", #PB_FileSystem_Force | #PB_FileSystem_Recursive)

; On renomme les autres dossiers
; On part du #NbDossierSauvegarde - 1 vers le dossier 1
For Numero = #NbDossierSauvegarde - 1 To 1 Step -1
  RenameFile(DossierSauvegarde + RSet(Str(Numero), 2, "0") + "\", DossierSauvegarde + RSet(Str(Numero + 1), 2, "0") + "\")
Next

; On sauvegarde les données en copiant le dossier
CopyDirectory(Dossier, DossierSauvegarde + "01" + "\", "*.*", #PB_FileSystem_Recursive)

Publié : dim. 09/janv./2005 16:35
par Anonyme2
Régis, le code que j'ai modifié fonctionne avec copydirectory et le dossier existe.

Publié : dim. 09/janv./2005 16:52
par Apprenti
Merci
Non non je veux d'abord renommer pour incrementer

Es-ce que le $ avec les variables est encore utile ?

pour quoi ces 2 lignes à la fin ?

Code : Tout sélectionner

   RepSource$ = "c:\Essai"
   RepDestination$ = "C:\Double\"+StringField(RepSource$, 2, "\")
je voudrais pouvoir garder les 10 dernières sauvegardes

Publié : dim. 09/janv./2005 17:34
par Le Soldat Inconnu
Denis, pas chez moi, copydirectory ne marche que si le dossier n'existe pas :roll:

Apprenti : regarde mon code, il renomme les dossiers pour garder les 20 dernières sauvegardes

Publié : dim. 09/janv./2005 18:16
par Anonyme2
Apprenti a écrit :Merci
Non non je veux d'abord renommer pour incrementer

Es-ce que le $ avec les variables est encore utile ?

pour quoi ces 2 lignes à la fin ?

Code : Tout sélectionner

   RepSource$ = "c:\Essai"
   RepDestination$ = "C:\Double"+StringField(RepSource$, 2, "")
je voudrais pouvoir garder les 10 dernières sauvegardes
J'ai mis ces 2 lignes à la fin mais en regardant de plus près, elles sont juste avant l'appel des procédures, c'est comme ça que j'écris mon codes, les déclarations d'abord, puis les procédures et j'affecte les valeurs après les procédures juste avant le corps du programme.

En fait le stringfield permet de s'affranchir de la chaine RepSource$ (il faut tout de même qu'elle ne comporte qu'un dossier) mais tu pourrais écrire une petite procedure qui énumère les dossiers d'une chaine avec Stringfield c'est assez simple et puis créer les dossiers au fur et à mesure, et là tu ne passe que la chaine en paramètres, le reste se fait tout seul.

Publié : dim. 09/janv./2005 18:23
par Anonyme2
Le Soldat Inconnu a écrit :Denis, pas chez moi, copydirectory ne marche que si le dossier n'existe pas :roll:
Je viens de réessayer (j'ai XP home edition) et ça marche bien , le dossier existait déjà, la copie a eu lieu. Le dossier de copie a conservé les anciens fichiers avec la directive #PB_FileSystem_Recursive (je n'ai fait des essais qu'avec #PB_FileSystem_Recursive ) alors que la doc dit
Copie le répertoire source dans le répertoire destination. Attention, si le répertoire existe déjà, son contenu sera automatiquement écrasé. Si Resultat est 0, le répertoire ne peut être copié.
Ca c'est pas vrai sous XP édition familiale. Les autres OS je ne sais pas.

Tes essais c'est sous Win98 ?

Sinon, CopyDirectory() ne fonctionne que si la chaine n'est pas terminée par / (la doc ne le dit pas) alors que createdirectory() fonctionne avec le / ou sans le /

Publié : dim. 09/janv./2005 18:58
par Apprenti
Un grand merci à vous deux, je reprends le moral !

J'ai pu l'adapter à mes besoins

Comment éviter l'affichage de la fenêtre "PureBasic debbuger" ?


Code : Tout sélectionner

;     ******************************************
;     Sauvegarde des developpements en PureBasic 
;     ******************************************
;

DossierSource.s = "F:\PureBasic\"
DossierSauvegarde.s = "G:\Svg\"
NomSauvegarde.s = "PureBasic"

; Creation du dossier de sauvegarde
CreateDirectory(DossierSauvegarde)

#NbDossierSauvegarde = 20 ; Nombre de copie de sauvegarde

; Suppression du dernier dossier de sauvegarde donc le #NbDossierSauvegarde
DeleteDirectory(DossierSauvegarde + NomSauvegarde + RSet(Str(#NbDossierSauvegarde), 2, "0") + "\", "*.*", #PB_FileSystem_Force | #PB_FileSystem_Recursive)

; Renommage des autres dossiers
; On part du #NbDossierSauvegarde - 1 vers le dossier 1
For Numero = #NbDossierSauvegarde - 1 To 1 Step -1
  RenameFile(DossierSauvegarde + NomSauvegarde + RSet(Str(Numero), 2, "0") + "\", DossierSauvegarde + NomSauvegarde + RSet(Str(Numero + 1), 2, "0") + "\")
Next

; Sauvegarde des données en copiant le dossier
CopyDirectory(DossierSource, DossierSauvegarde + NomSauvegarde + "01" + "\", "*.*", #PB_FileSystem_Recursive)
RunProgram("c:\Program Files\PureBasic\PureBasic.exe","","") 

Publié : dim. 09/janv./2005 19:02
par Pingtix
Tu ne peux pas si tu as la démo.

Publié : dim. 09/janv./2005 19:06
par Apprenti
Ok, ce n'est qu'un détail
de toute façon, je prends ma licence si j'arrive à faire tourner quelque chose....