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

Sauvegarde de son travail

Message par Apprenti »

Moi qui débute je recens un grand besoin de sauvegarde... !!!

Vu la taille des disques durs d'aujourd'hui et la petitesse des code PB, je duplique carrement le dossier des codes au lancement de PureBasic

Voilà le batch que j'utilise.
Il doit être facile pour vous de faire çà en PB
pour que çà gère toutes les versions de windows et Linux
et de pouvoir rentrer en paramètre :
- l'emplacement de PureBasic.exe
- l'emplacement des données à sauvegarder
- et le dossier de sauvegarde (pourquoi pas)
- le nombre de sauvegarde incrémenté
@echo off
cls
echo.
echo ..........................................
echo Sauvegarde des developpements en PureBasic
echo ..........................................
echo.
echo Version 1.1
echo.
echo Suppression du plus ancien dossier
rem - sous XP, WinNT, Win2000
if exist Svg30\*.* rd /q /s Svg30
rem - sous Win9x
rem if exist Svg30\*.* deltree /y Svg30
echo.
rem Aller dans le dossier de développement
cd Caisse
echo Incrementation des 30 dernieres sauvegardes
if exist Svg29\*.* ren Svg29 Svg30
if exist Svg28\*.* ren Svg28 Svg29
if exist Svg27\*.* ren Svg27 Svg28
if exist Svg26\*.* ren Svg26 Svg27
if exist Svg25\*.* ren Svg25 Svg26
if exist Svg24\*.* ren Svg24 Svg25
if exist Svg23\*.* ren Svg23 Svg24
if exist Svg22\*.* ren Svg22 Svg23
if exist Svg21\*.* ren Svg21 Svg22
if exist Svg20\*.* ren Svg20 Svg21
if exist Svg19\*.* ren Svg19 Svg20
if exist Svg18\*.* ren Svg18 Svg19
if exist Svg17\*.* ren Svg17 Svg18
if exist Svg16\*.* ren Svg16 Svg17
if exist Svg15\*.* ren Svg15 Svg16
if exist Svg14\*.* ren Svg14 Svg15
if exist Svg13\*.* ren Svg13 Svg14
if exist Svg12\*.* ren Svg12 Svg13
if exist Svg11\*.* ren Svg11 Svg12
if exist Svg10\*.* ren Svg10 Svg11
if exist Svg09\*.* ren Svg09 Svg10
if exist Svg08\*.* ren Svg08 Svg09
if exist Svg07\*.* ren Svg07 Svg08
if exist Svg06\*.* ren Svg06 Svg07
if exist Svg05\*.* ren Svg05 Svg06
if exist Svg04\*.* ren Svg04 Svg05
if exist Svg03\*.* ren Svg03 Svg04
if exist Svg02\*.* ren Svg02 Svg03
if exist Svg01\*.* ren Svg01 Svg02
echo.
rem Création du dossier de sauvegarde
md Svg01
cd Svg01
echo.
echo Sauvegarde des programmes
echo - - - - - - - - - - - - -
echo.
copy ..\*.pb
rem Lancement de PureBasic
"C:\Program Files\PureBasic\PureBasic.exe"
exit
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

C'est bien :D , mais tu programmes en PB, pourquoi ne pas l'avoir fait en PB ?
Apprenti
Messages : 45
Inscription : mar. 28/déc./2004 23:06

Message par Apprenti »

Je demande que çà de ne plus faire de batch et de pouvoir utiliser PureBasic

Es-ce que c'est possible en version démo ?

PureBasic saura-t-il utiliser un Deltree our Rd suivant le windows ?

J'ai pas vu de commande pour renommer un dossier ?

Je prends ma licence si j'arrive à en faire quelque chose de PureBasic

bon week-end à vous
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Apprenti a écrit :Je demande que çà de ne plus faire de batch et de pouvoir utiliser PureBasic

Es-ce que c'est possible en version démo ?

PureBasic saura-t-il utiliser un Deltree our Rd suivant le windows ?

J'ai pas vu de commande pour renommer un dossier ?

Je prends ma licence si j'arrive à en faire quelque chose de PureBasic

bon week-end à vous
J'avais oublié que l'on ne peux pas utiliser les API avec la version de démo
hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

Message par hardy »

Pour deltree, ça peut se programmer sans problème:
Regarde l'aide "filesystem" et "file". y'a tout ce qui faut.

On peut aussi lancer le deltree du DOS à partir d'un prog. PB en utilisant un "ShellExecute_" (API donc pas version démo).
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

oui, ton batch est faisable avec la version Démo, on a toutes les fonctions nécessaires (j'avais fait un truc du type au début avec la démo pour sauver les param d'un programme)


Pour renommer un dossier, c'est RenameFile
copier un dossier, CopyDirectory
Supprimer un dossier, DeleteDirectory
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)]
Apprenti
Messages : 45
Inscription : mar. 28/déc./2004 23:06

Message par Apprenti »

merci
j'avais trouvé RenameFile mais je pensais que ca renommait que les fichiers
Apprenti
Messages : 45
Inscription : mar. 28/déc./2004 23:06

Message par Apprenti »

Voilà j'essaye de faire une copie du dossier dans un premier temps
rien ne marche....

Code : Tout sélectionner

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

;- Constante Gadget 
Enumeration
#Str_NbreSvg
EndEnumeration

;Stockage des infos en attendant un ecran parametre
;#Str_NbreSvg = 10

Procedure Dossier() ; Teste l'existance du dossier Racine de la sauvegarde
RepDestination$ = "C:\Double\Essai\"
TestDossier = ExamineDirectory(0, RepDestination$ , "")
If TestDossier= 0
       MessageRequester("Info","Le dossier existe dejà",#PB_MessageRequester_Ok) 
 Else
   If TestDossier= 1
      CreateDirectory("C:\Double\")
      MessageRequester("Info","Dossier crée",#PB_MessageRequester_Ok) 
 EndIf
      EndIf
Delay(5000)
 EndProcedure


Procedure Svg() ;    Sauvegarde
RepSource$ = "c:\Essai\"
RepDestination$ = "c:\Double\Essai\"
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
 Delay(5000)
EndProcedure


Procedure Sup() ;    Suppression de la plus vieille sauvegarde
RepSup$ = RepDestination$+"10"
Resultat = ExamineDirectory(0, RepDestination$+"10", "")
 If Resultat = 0
     MessageRequester("Erreur","Dossier non trouvé",#PB_MessageRequester_Ok) 
 Else
     If Resultat = 1
    DeleteDirectory(RepDestination$,"*.*")
    MessageRequester("Info","Dossier supprimé",#PB_MessageRequester_Ok) 
     EndIf   
 EndIf
 Delay(5000)
EndProcedure

Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

pour savoir si un dossier existe, il faut utiliser FileSize

avant de faire le copydirectory, il faut bien s'assurer que le dossier source et le dossier de destination existe
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)]
Apprenti
Messages : 45
Inscription : mar. 28/déc./2004 23:06

Message par Apprenti »

merci mais je m'en sors toujours pas, rien ne marche même pas un affichage
alors aue je mets un Delay

Code : Tout sélectionner

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

;- Constante Gadget 
Enumeration
#Str_NbreSvg
EndEnumeration

;Stockage des infos en attendant un ecran parametre
;#Str_NbreSvg = 10

Procedure Dossier() ; Teste l'existance du dossier Racine de la sauvegarde
RepDestination$ = "C:\Double\Essai\"
TestDossier = FileSize(RepDestination$)
If TestDossier = 1
       MessageRequester("Info","Le dossier n'existe pas",#PB_MessageRequester_Ok) 
 Else
  ; If TestDossier = 2
      CreateDirectory("C:\Double\")
      MessageRequester("Info","Dossier crée",#PB_MessageRequester_Ok) 
 ; EndIf
      EndIf
Delay(5000)
 EndProcedure
 
Goto Fin  ; fin provisoire du programme en attendant que la 1ère procédure marche

Procedure Svg() ;    Sauvegarde
RepSource$ = "c:\Essai\"
RepDestination$ = "c:\Double\Essai\"
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
 Delay(5000)
EndProcedure

Fin:
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Tu ne peux pas créer un dossier "C:\Double\Essai" d'un coup, il faut le faire en deux fois et en autant de fois qu'il y a de sous-dossiers

(il faudrait un commande qui accepte la récursivité)

Sinon, c'est inutile de tester s'il existe avant de le créer, Createdirectory() ne va créer le dossier que s'il n'existe pas dons pas de problème, aucune donnée de perdue (d'ailleurs la fonction retourne 0 si elle échoue, avec le débug devant tu lances 2 fois la procedure et tu verras qu'au 2eme tour la fonction retrourne 0.

Ensuite pour ton prog tu supprime les debug

ta procedure revient à ça

Code : Tout sélectionner

Procedure Dossier() 
  Debug CreateDirectory("C:\Double\")
  Debug CreateDirectory("C:\Double\Essai\")
EndProcedure 
Apprenti
Messages : 45
Inscription : mar. 28/déc./2004 23:06

Message par Apprenti »

cela marche toujours pas, aucun message visible

Code : Tout sélectionner

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

;- Constante Gadget 
Enumeration
#Str_NbreSvg
EndEnumeration


Procedure Dossier() ; Créer le dossier de sauvegarde
  Debug CreateDirectory("C:\Double\")
  Debug CreateDirectory("C:\Double\Essai\")
 EndProcedure
 
Goto Fin  ; fin provisoire du programme en attendant que la 1ère procédure marche

Procedure Svg() ;    Sauvegarde
RepSource$ = "c:\Essai\"
RepDestination$ = "c:\Double\Essai\"
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

Fin:
Delay(5000)
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Essaye le code suivant qui fonctionne

Il faut peut-être appeler tes procedures pour les lancer.

Je n'ai fait plus qu'une procedure qui fonctionne.
Contrairement à ce que la doc dit , la sauvegarde récursive n'efface pas les fichiers présents dans le dossier (j'ai fait l'essai avec 2 répertoires différents )

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 /


Code : Tout sélectionner

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

;- Constante Gadget 
Enumeration 
#Str_NbreSvg 
EndEnumeration 


Procedure Svg() ;    Sauvegarde 
   RepSource$ = "c:\Essai" 
   RepDestination$ = "c:\Double\Essai" 
   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 


Svg()       ; appel de la procedure
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Code : Tout sélectionner

CopyDirectory(RepSource$, RepDestination$,"*.*",#PB_FileSystem_Recursive)
manque le *.*
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 »

Le Soldat Inconnu a écrit :

Code : Tout sélectionner

CopyDirectory(RepSource$, RepDestination$,"*.*",#PB_FileSystem_Recursive)
manque le *.*
Régis, Ca marche sans le *.*, voir la doc
Par défaut, une chaîne Masque$ vide permet la copie de tous les fichiers.
Répondre