Sauvegarde de son travail

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
Apprenti
Messages : 45
Inscription : mar. 28/déc./2004 23:06

Message 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()     
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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()
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Régis, le code que j'ai modifié fonctionne avec copydirectory et le dossier existe.
Apprenti
Messages : 45
Inscription : mar. 28/déc./2004 23:06

Message 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
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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 /
Apprenti
Messages : 45
Inscription : mar. 28/déc./2004 23:06

Message 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","","") 
Pingtix
Messages : 159
Inscription : mer. 03/nov./2004 15:30

Message par Pingtix »

Tu ne peux pas si tu as la démo.
Apprenti
Messages : 45
Inscription : mar. 28/déc./2004 23:06

Message 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....
Répondre