FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Button_picture
par pascal10000 Aujourd'hui à 11:41

» Pourquoi le compilateur stagne
par Minibug Aujourd'hui à 11:09

» 4 (en analyse): SYNEDIT_TARGET_IS_OBJECT devient inactif
par Jack Aujourd'hui à 10:09

» 3 (en analyse): Mauvaise interprétation du string "THEN"
par Jack Aujourd'hui à 10:03

» KGF.dll - demandes ou suggestions de modifications ou ajouts
par Marc Aujourd'hui à 10:00

» KGF_dll - nouvelles versions
par pascal10000 Hier à 17:27

» Mah-Jong européen new-look
par Minibug Mar 12 Déc 2017 - 22:31

» track_bar circulaire
par Klaus Mar 12 Déc 2017 - 13:54

» API Windows
par Klaus Mar 12 Déc 2017 - 3:21

» Cartes de voeux, menus, etc.
par JL35 Lun 11 Déc 2017 - 17:48

» a l'aide klaus
par Minibug Lun 11 Déc 2017 - 11:42

» bug SYNEDIT_TARGET_IS_OBJECT
par Jack Lun 11 Déc 2017 - 0:16

» Jukebox : Serge Reggiani
par papydall Sam 9 Déc 2017 - 5:58

» Ecouter la radio fm sur votre pc
par pascal10000 Sam 9 Déc 2017 - 3:42

» anomalie
par Klaus Sam 9 Déc 2017 - 3:21

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Décembre 2017
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
25262728293031
CalendrierCalendrier

Partagez | 
 

 Archivage (fichiers zip)

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
JL35



Nombre de messages : 6018
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Archivage (fichiers zip)   Mer 30 Déc 2015 - 18:38

Une petite illustration des fonctions ARCHIVER_ADD et ARCHIVER_EXTRACT, pour archivage et restauration du contenu d'un répertoire sous forme compressée (zip):
Code:

' Archive.bas Zip/Unzip d'un répertoire dans un fichier
' La compression comprend le contenu du répertoire et tous ses sous-répertoires
LABEL Quit,Chr,Chf,Maj,Vzi,Exec
DIM a$,b$,d$,f$,r%,k%
WIDTH 0,300: HEIGHT 0,280: FONT_NAME 0,"Arial": FONT_BOLD 0
  COLOR 0,190,255,255: BORDER_SMALL 0: CAPTION 0,"-  COMPRESSION / DÉCOMPRESSION  -"
CONTAINER_OPTION 10: WIDTH 10,280: HEIGHT 10,60: CAPTION 10,"Archivage"
  COLOR 10,255,255,164
OPTION 11: PARENT 11,10: TOP 11,15: LEFT 11,10
  WIDTH 11,260: CAPTION 11,"Compresser      (Répertoire -> Fichier Zip)"
OPTION 12: PARENT 12,10: TOP 12,TOP(11)+20: LEFT 12,LEFT(11)
  WIDTH 12,260: CAPTION 12,"Décompresser  (Fichier Zip -> Répertoire)"
ALPHA 20: TOP 20,TOP(10)+HEIGHT(10): LEFT 20,5: CAPTION 20,"Répertoire de compression:"
EDIT 21: TOP 21,TOP(20)+15: LEFT 21,0: WIDTH 21,WIDTH(0)-80
  FONT_NAME 21,"Consolas": FONT_SIZE 21,9
BUTTON 22:TOP 22,TOP(21): WIDTH 22,55: LEFT 22,WIDTH(0)-75: CAPTION 22,"Parcourir"
  FONT_BOLD_OFF 22: FONT_ITALIC 22: ON_CLICK 22,Chr
ALPHA 23: TOP 23,TOP(21)+25: LEFT 23,5: FONT_BOLD_OFF 23

ALPHA 30: TOP 30,TOP(20)+60: LEFT 30,LEFT(20): CAPTION 30,"Fichier ZIP:"
EDIT 31: TOP 31,TOP(30)+15: LEFT 31,LEFT(21): WIDTH 31,WIDTH(21)
  FONT_NAME 31,"Consolas": FONT_SIZE 31,9
BUTTON 32: TOP 32,TOP(31): WIDTH 32,WIDTH(22): LEFT 32,LEFT(22): CAPTION 32,"Parcourir"
  FONT_BOLD_OFF 32: FONT_ITALIC 32: ON_CLICK 32,Chf
BUTTON 35: TOP 35,TOP(31)+24: HEIGHT 35,18: LEFT 35,20: FONT_BOLD_OFF 35
CAPTION 35,"Voir contenu": HIDE 35: ON_CLICK 35,Vzi

ALPHA 40: TOP 40,TOP(30)+65: LEFT 40,0: COLOR 40,255,255,0: FONT_SIZE 40,9
  FONT_COLOR 40,148,0,0
  ON_CLICK 11,Maj: ON_CLICK 12,Maj: MARK_ON 11
BUTTON 45: TOP 45,TOP(40)-3: LEFT 45,WIDTH(0)-95: CAPTION 45,"Exécuter"
  ON_CLICK 45,Exec
 
ALPHA 50: TOP 50,TOP(40)+20: LEFT 50,5
ALPHA 51: TOP 51,TOP(50)+16: LEFT 51,5: COLOR 51,255,255,0

BUTTON 55: TOP 55,TOP(40)+30: LEFT 55,LEFT(45): CAPTION 55,"Quitter": ON_CLICK 55,Quit

FORM 60: HIDE 60: HEIGHT 60,800: WIDTH 60,400: BORDER_SMALL 60
MEMO 61: PARENT 61,60: FULL_SPACE 61: BAR_BOTH 61: FONT_NAME 61,"Consolas"

END
' ==============================================================================
Quit:
TERMINATE
' ==============================================================================
Chr:
Choixrep()
d$ = CLIPBOARD_STRING_PASTE$
TEXT 21,d$
EXECUTE_WAIT "Cmd.exe /c DIR /S "+d$+" | clip"
a$ = CLIPBOARD_STRING_PASTE$: k% = INSTR(a$,"Total des fichiers")
a$ = RIGHT_POS$(a$,k%+29)
b$ = LTRIM$(LEFT$(a$,27))+", "+LTRIM$(MID$(a$,54,23))+", "+LTRIM$(MID$(a$,28,24))
CAPTION 23,b$
RETURN
' ==============================================================================
Chf:
Choixfich("*.zip","")
f$ = CLIPBOARD_STRING_PASTE$
TEXT 31,f$
IF FILE_EXISTS(f$) = 1 THEN SHOW 35
RETURN
' ==============================================================================
Maj:
IF CHECKED(11) = 1
    CAPTION 40," COMPRESSION :  DOSSIER -> ZIP "
    CAPTION 20,"Répertoire de compression:"
ELSE
    CAPTION 40," DÉCOMPRESSION : ZIP -> DOSSIER "
    CAPTION 20,"Répertoire de décompression:"
END_IF
RETURN
' ==============================================================================
Vzi:
IF FILE_EXISTS(f$) = 0 THEN MESSAGE "Fichier inexistant !": RETURN
Vzip(f$)
CAPTION 60,"Contenu de "+f$
CLEAR 61: CLIPBOARD_PASTE 61: SHOW 60
RETURN
' ==============================================================================
Exec:
d$ = TEXT$(21): IF RIGHT$(d$,1)<>"\" THEN d$ = d$+"\"
f$ = TEXT$(31)
IF CHECKED(11) = 1: ' compression
    IF DIR_EXISTS(d$) = 0 THEN MESSAGE "Répertoire inexistant !": RETURN
    CAPTION 50,"Compression lancée ...": WAIT 100
    ARCHIVER_ON
    ARCHIVER_ADD d$,f$
    SHOW 35
ELSE: ' décompression
    IF FILE_EXISTS(f$) = 0 THEN MESSAGE "Fichier zip inexistant !": RETURN
    IF DIR_EXISTS(d$) = 0
        a$ = "Répertoire de destination inexistant, le créer ?"
        r% = MESSAGE_CONFIRMATION_YES_NO(a$)
        IF r% <> 1 THEN RETURN
        DIR_MAKE d$
    ELSE
        EXECUTE_WAIT "Cmd.exe /c DIR /B "+d$+" | clip"
        a$ = CLIPBOARD_STRING_PASTE$
        IF a$ <> ""
            a$ = "Répertoire de destination non vide,"+CHR$(10)
            a$ = a$+" supprimer entièrement le contenu ?"
            r% = MESSAGE_CONFIRMATION_YES_NO(a$)
            IF r% = 1
                ' Suppression du répertoire et de son contenu
                EXECUTE_WAIT "Cmd.exe /c RD /S /Q "+d$
                DIR_MAKE d$: ' nouvelle création
            END_IF
        END_IF
    END_IF
    CAPTION 50,"Décompression lancée ...": WAIT 100
    ARCHIVER_ON
    ARCHIVER_EXTRACT f$,d$
END_IF
ARCHIVER_OFF
CAPTION 51," Terminé ! "
RETURN
' ==============================================================================
SUB Choixrep()
' Choix d'un répertoire, résultat dans le Clipboard (ou "")
' (choisir un fichier quelconque du répertoire voulu, puis 'Ouvrir')
DIM_LOCAL rs$, odl%, fchh$: odl% = 495
WHILE OBJECT_EXISTS(odl%) = 1: odl% = odl%+1: END_WHILE
OPEN_DIALOG odl%: DIR_DIALOG odl%,"C:\"
fchh$ = FILE_NAME$(odl%)
DELETE odl%
IF fchh$ = "" OR LEN(fchh$) < 5 THEN fchh$ = ""
CLIPBOARD_STRING_COPY FILE_EXTRACT_PATH$(fchh$)
END_SUB
' ==============================================================================
SUB Choixfich(filtre$,rd$)
' Choix d'un fichier, résultat dans le Clipboard (ou "")
' Filtre éventuel, de la forme "*.ext"
' rd$ = répertoire de démarrage, ou "": C:\
DIM_LOCAL odl%, fchh$: odl% = 495
WHILE OBJECT_EXISTS(odl%) = 1: odl% = odl%+1: END_WHILE
OPEN_DIALOG odl%
DIR_DIALOG odl%,"C:\": IF rd$<>"" THEN DIR_DIALOG odl%,rd$
IF filtre$ <> ""
    IF LEFT$(filtre$,2) <>"*." THEN filtre$ = "*."+filtre$
    FILTER odl%,"Fichiers "+UPPER$(RIGHT$(filtre$,3))+"|"+filtre$
END_IF
fchh$ = FILE_NAME$(odl%)
DELETE odl%
IF fchh$ = "" OR LEN(fchh$) < 5 THEN fchh$ = ""
CLIPBOARD_STRING_COPY fchh$
END_SUB
' ==============================================================================
SUB Vzip(zip$)
' Liste des fichiers contenus dans le fichier compressé zip$.
' Avec leur taille réelle, leur dernière date de modification et leur nom.
' Le résultat est rendu dans le clipboard (exemple CLIPBOARD_PASTE dans un Memo)
DIM_LOCAL a$,v%(100),i%,sz%,dt%,hr%,tc%,tr%,ln%,le%,h%,m%,nom$,po%,aa%,mm%,jj%
FILEBIN_OPEN_READ 9,zip$: sz% = FILEBIN_SIZE(9)
a$ = "": po% = 0
WHILE po%<sz%
    ' séquence début du header de chaque fichier (en hexa): 50 4B 03 04
    FILEBIN_POSITION 9,po%
    FILEBIN_BLOCK_READ 9,100,v%(0): IF v%(2) <> 3 THEN EXIT_WHILE: ' c'est la fin
    hr% = v%(10)+256*v%(11): ' heure fichier (2 octets)
    dt% = v%(12)+256*v%(13): ' date fichier (2 octets)
    aa% = 1980+BIN_AND(dt%,HEX("FE00"))/512: ' année (depuis 1980)
    mm% = BIN_AND(dt%,HEX("1E0"))/32: ' mois
    jj% = BIN_AND(dt%,31): ' jour
    h% = BIN_AND(hr%,HEX("F800"))/2048: ' heure
    m% = BIN_AND(hr%,HEX("7E0"))/32: ' minutes
    tc% = v%(18)+256*v%(19)+65536*v%(20)+16777216*v%(21): ' taille compactée
    tr% = v%(22)+256*v%(23)+65536*v%(24)+16777216*v%(25): ' taille réelle
    ln% = v%(26)+256*v%(27): ' longueur du nom
    le% = v%(28)+256*v%(29): ' longueur extra field
    nom$ = "": FOR i% = 0 TO ln%-1: nom$=nom$+CHR$(v%(30+i%)): NEXT i%
    a$ = a$ + RIGHT$("        "+STR$(tr%),9)+"  "
    a$ = a$ + RIGHT$("0"+STR$(jj%),2)+"/"+RIGHT$("0"+STR$(mm%),2)
    a$ = a$ + "/"+STR$(aa%)+" "+RIGHT$("0"+STR$(h%),2)
    a$ = a$ + ":"+RIGHT$("0"+STR$(m%),2)+"  " + nom$ + CHR$(13)+CHR$(10)
    po% = po%+30+ln%+le%+tc%: ' positionnement sur le fichier suivant
END_WHILE
FILEBIN_CLOSE 9
CLIPBOARD_STRING_COPY LEFT$(a$, LEN(a$)-2)
END_SUB
' ==============================================================================
Noter que la compression inclut le contenu du répertoire donné et de tous ses sous-répertoires.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 6018
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Archivage (fichiers zip)   Mer 6 Jan 2016 - 0:03

Et voici sous une forme un peu plus élaborée, un programme de sauvegarde/restauration de répertoires, dont je me sers pour:
- faire des sauvegardes périodiques sur un disque dur externe.
- synchroniser un ordinateur portable avec l'ordinateur de bureau, en passant par une clé usb par exemple.
Il suffit d'établir une liste des répertoires à sauvegarder en totalité (répertoires sous la racine du disque dur ou secondaires, il suffit d'indiquer leur chemin par rapport à C:\).

Il y a donc deux fonctions: sauvegarde de sécurité ou synchro, et restauration (en principe seulement sur un pc auxiliaire: synchronisation).
Code:

' Sauvrest.bas: sauvegarde/restore de répertoires sous forme zip

LABEL Quit,Vol,Chvol,Maj,Exec,Sauve,Restor,Edlist
DIM flist$,fsauv$,ftmp$,rtr$,fs$,fl$,i%,k%,nr%,tf,tr,to,a$,b$,rs$,db$,vsys$,vol$
vsys$ = "C:\"
rtr$ = vsys$+"SAUVE\"
flist$ = rtr$+"Sauvlist.txt": ' liste des répertoires à sauvegarder
fsauv$ = rtr$+"Sauvrest.exe": ' ce programme compilé
IF DIR_EXISTS(vsys$+"SAUVE\")=0 THEN DIR_MAKE vsys$+"SAUVE\"

WIDTH 0,300: HEIGHT 0,640
FONT_NAME 0,"Arial": FONT_BOLD 0: BORDER_SMALL 0: CAPTION 0,"SAUVEGARDE / RESTORE"
COLOR 0,190,255,255
CONTAINER 10: WIDTH 10,WIDTH(0)-25: HEIGHT 10,120: CAPTION 10,"Volumes montés :"
LIST 11: PARENT 11,10: FULL_SPACE 11: HEIGHT 11,HEIGHT(10)-40
  COLOR 11,200,255,200: ON_CLICK 11,Chvol
BUTTON 12: PARENT 12,10: HEIGHT 12,18: TOP 12,HEIGHT(10)-20: LEFT 12,WIDTH(10)/2-40
  CAPTION 12,"Actualiser": ON_CLICK 12,Vol
CONTAINER_OPTION 20: TOP 20,TOP(10)+HEIGHT(10): WIDTH 20,WIDTH(10): HEIGHT 20,40
  COLOR 20,255,255,164
OPTION 21: PARENT 21,20: TOP 21,15: LEFT 21,20: CAPTION 21,"Sauvegarde"
OPTION 22: PARENT 22,20: TOP 22,TOP(21): LEFT 22,130: CAPTION 22,"Restore"
  MARK_ON 21: ON_CLICK 21,Maj: ON_CLICK 22,Maj
ALPHA 30: TOP 30,TOP(20)+HEIGHT(20)+5: LEFT 30,5: CAPTION 30,"Répertoire de sauvegarde:"
EDIT 31: TOP 31,TOP(30)+15: LEFT 31,5: WIDTH 31,WIDTH(20)-10: FONT_SIZE 31,10
ALPHA 32: TOP 32,TOP(30)+40: LEFT 32,5: CAPTION 32,"Liste des répertoires:"
EDIT 33: TOP 33,TOP(32)+15: LEFT 33,5: WIDTH 33,WIDTH(31)-40: FONT_SIZE 33,10
BUTTON 34: TOP 34,TOP(33): WIDTH 34,45: LEFT 34,WIDTH(0)-70: CAPTION 34,"Edit"
  ON_CLICK 34,Edlist

ALPHA 38: TOP 38,TOP(33)+30: LEFT 38,40
  CAPTION 38,"Répertoires sauvegardés :"+CHR$(10)+STRING$(26," ")+"Fich.      Rép.            octets"
LIST 39: TOP 39,TOP(38)+30: LEFT 39,5: WIDTH 39,20: HEIGHT 39,240
LIST 40:TOP 40,TOP(39): LEFT 40,25: HEIGHT 40,HEIGHT(39): WIDTH 40,80
LIST 41: TOP 41,TOP(40): LEFT 41,LEFT(40)+WIDTH(40): HEIGHT 41,HEIGHT(40): WIDTH 41,45
LIST 42: TOP 42,TOP(40): LEFT 42,LEFT(41)+WIDTH(41): HEIGHT 42,HEIGHT(40): WIDTH 42,40
LIST 43: TOP 43,TOP(40): LEFT 43,LEFT(42)+WIDTH(42): HEIGHT 43,HEIGHT(40): WIDTH 43,85
ALPHA 44: TOP 44,TOP(40)+HEIGHT(40): LEFT 44,LEFT(41)
  FOR k% = 39 TO 44: FONT_NAME k%,"Consolas": NEXT k%
 
ALPHA 45: TOP 45,TOP(40)+HEIGHT(40)+10: LEFT 45,0: COLOR 45,255,255,0
ALPHA 46: TOP 46,TOP(45)+16: LEFT 46,LEFT(45): COLOR 46,255,255,0
BUTTON 50: TOP 50,TOP(45)+3: LEFT 50,WIDTH(0)-100: CAPTION 50,"Lancer"
  ON_CLICK 50,Exec
ALPHA 51: TOP 51,TOP(46)+25: LEFT 51,5: COLOR 51,255,255,0
BUTTON 52: TOP 52,TOP(50)+35: LEFT 52,LEFT(50): CAPTION 52,"Quitter"
ON_CLICK 52,Quit

MEMO 60: HIDE 60
IF FILE_EXISTS(flist$) = 0
  FILE_OPEN_WRITE 1, flist$
  FILE_WRITELN 1,"*                  ***** FICHIER DES SAUVEGARDES *****"
  FILE_WRITELN 1,"* Liste des répertoires à sauvegarder sous C:\"
  FILE_WRITELN 1,"* (la sauvegarde comprend le répertoire indiqué et tous ses sous-répertoires)"
  FILE_WRITELN 1,"* - les lignes vides ou commençant par '*' sont ignorées."
  FILE_WRITELN 1,"* La sauvegarde se fait sous la forme de fichiers compressés .zip (un fichier par"
  FILE_WRITELN 1,"* répertoire)."
  FILE_WRITELN 1,"*********************************************************************************"
  FILE_CLOSE 1
END_IF
GOSUB Vol
END
' ==============================================================================
Quit:
TERMINATE
' ==============================================================================
Vol:
'  Liste des volumes connectés
CLEAR 11
Volumes()
k% = INSTR(volu$,";")
WHILE k%>0
    ITEM_ADD 11,LEFT$(volu$,k%-1): volu$=RIGHT_POS$(volu$,k%+1)
    k% = INSTR(volu$,";")
END_WHILE
ITEM_ADD 11,volu$
GOSUB Maj
RETURN
' ==============================================================================
Chvol:
' Choix du volume de sauvegarde
vol$ = ITEM_INDEX$(11)
rs$ = LEFT$(vol$,2)+"\SAUVE\"
TEXT 31,rs$
GOSUB Maj
RETURN
' ==============================================================================
Maj:
' Actualisation des volumes connectés
CLEAR 40: CLEAR 41: CLEAR 42: CLEAR 43
IF CHECKED(21) = 1
    ' Sauvegarde
    CAPTION 45,"Sauvegarde des répertoires"
    CAPTION 46,"Depuis: "+ vsys$+"  Vers: "+rs$
    TEXT 33,flist$
    tf = 0: tr = 0: to = 0: nr% = 0
    FILE_OPEN_READ 1,flist$
    WHILE FILE_EOF(1) = 0
        FILE_READLN 1,a$
        IF TRIM$(a$)<>"" AND LEFT$(a$,1)<>"*"
            ITEM_ADD 40,a$: nr% = nr%+1
            Dirinfos(vsys$+a$): a$ = CLIPBOARD_STRING_PASTE$: k% = INSTR(a$,";")
            b$ = LEFT$(a$,k%-1): ITEM_ADD 41,RIGHT$("    "+b$,6): tf=tf+VAL(b$)
            a$ = RIGHT_POS$(a$,k%+1): k% = INSTR(a$,";")
            b$ = LEFT$(a$,k%-1): tr = tr+VAL(b$)
            ITEM_ADD 42,RIGHT$("    "+b$,5): b$ = RIGHT_POS$(a$,k%+1)
            ITEM_ADD 43,RIGHT$("          "+b$,12): to = to+VAL(b$)
        END_IF
    END_WHILE
    FILE_CLOSE 1
    FOR k% = 40 TO 43: ITEM_ADD k%,"": NEXT k%
    ITEM_ADD 40,"    Total ="
    ITEM_ADD 41,RIGHT$("    "+STR$(tf),6)
    ITEM_ADD 42,RIGHT$("    "+STR$(tr),5)
    ITEM_ADD 43,RIGHT$("          "+STR$(to),12)
ELSE
    ' Restore
    IF vol$ = ""
        a$ = "Monter et sélectionner le volume contenant la sauvegarde !"
        MsgOK(0,TOP(40)+50,a$): RETURN
    END_IF
    CAPTION 45,"Restore des répertoires"
    CAPTION 46,"Depuis: "+ rs$+"  Vers: "+vsys$
    EXECUTE_WAIT "Cmd.exe /c DIR /B "+rs$+"*.zip | clip"
    CLEAR 60: CLIPBOARD_PASTE 60
    FOR k% = 1 TO COUNT(60): ITEM_ADD 40,ITEM_READ$(60,k%): NEXT k%
    nr% = COUNT(60)
END_IF
RETURN
' ==============================================================================
Exec:
IF CHECKED(21) = 1
    GOSUB Sauve
ELSE
    GOSUB Restor
END_IF
RETURN
' ==============================================================================
Sauve:
' Sauvegarde des répertoires de la liste sous la forme d'un fichier zip du nom du
' répertoire par élément de la liste.. Si le nom du répertoire comporte des "\",
' ils seront remplacé par des "+" dans le nom du fichier zip.
IF rs$ = ""
    a$ = "Cliquer le volume de sauvegarde !"
    MsgOK(0,TOP(40)+50,a$): RETURN
END_IF
IF FILE_EXISTS(flist$)=0
    a$ = "Liste de sauvegardes non trouvée !"
    MsgOK(0,TOP(40)+50,a$): RETURN
END_IF
IF DIR_EXISTS(rs$) = 0 THEN DIR_MAKE rs$
EXECUTE_WAIT "Cmd.exe /c COPY /Y "+flist$+" "+rs$
IF FILE_EXISTS(fsauv$)=1 THEN EXECUTE_WAIT "Cmd.exe /c COPY /Y "+fsauv$+" "+rs$
db$ = TIME$: CAPTION 51,"Début: "+db$
ARCHIVER_ON
CLEAR 39
FOR k% = 1 TO nr%
    a$ = ITEM_READ$(40,k%): ITEM_ADD 39,"X": display
    b$ = a$: ' répertoire à sauvegarder
    FOR i% = 1 TO LEN(b$)
        IF MID$(b$,i%,1)="\" THEN b$ = LEFT$(b$,i%-1)+"+"+RIGHT_POS$(b$,i%+1)
    NEXT i%
    fs$ = rs$+b$+".zip": ' fichier zip
    ARCHIVER_ADD vsys$+a$,fs$
NEXT k%
ARCHIVER_OFF
a$ = "Sauvegarde: "+DATE$+" - Début: "+db$+" Fin: "+TIME$+" sur "+rs$+" "+vol$
fl$ = rs$+"Log.txt": IF FILE_EXISTS(fl$)=0 THEN FILE_OPEN_WRITE 1,fl$: FILE_CLOSE 1
FILE_OPEN_APPEND 1,fl$: FILE_WRITELN 1,a$: FILE_CLOSE 1
fl$ = rtr$+"Log.txt": IF FILE_EXISTS(fl$)=0 THEN FILE_OPEN_WRITE 1,fl$: FILE_CLOSE 1
FILE_OPEN_APPEND 1,fl$: FILE_WRITELN 1,a$: FILE_CLOSE 1
CAPTION 51,CAPTION$(51)+" Fin: "+TIME$
RETURN
' ==============================================================================
Restor:
' Restauration des répertoires à partir de la liste contenue dans la sauvegarde.
' (un fichier zip par répertoire sauvegardé). Si le nom du fichier zip comporte
' des "+", ils seront remplacés par des "\" pour établir le chemin du répertoire
' correspondant.
IF DIR_EXISTS(rs$) = 0
    a$ = "Répertoire de sauvegarde non trouvé !"
    MsgOK(0,TOP(40)+50,a$): RETURN
END_IF
IF FILE_EXISTS(flist$)=0
    EXECUTE_WAIT "Cmd.exe /c COPY "+rs$+"Sauvlist.txt "+flist$
END_IF
db$ = TIME$: CAPTION 51,"Début: "+db$
ARCHIVER_ON
CLEAR 39
FOR k% = 1 TO nr%
    a$ = ITEM_READ$(40,k%): ITEM_ADD 39,"X": display
    b$ = a$: ' fichier zip
    FOR i% = 1 TO LEN(b$)
        IF MID$(b$,i%,1)="+" THEN b$ = LEFT$(b$,i%-1)+"\"+RIGHT_POS$(b$,i%+1)
    NEXT i%
    fs$ = rs$+a$: ' fichier zip
    a$ = vsys$+LEFT$(b$,LEN(b$)-4): ' répertoire de restore
    IF DIR_EXISTS(a$) = 0 THEN DIR_MAKE a$
    ARCHIVER_EXTRACT fs$,a$
NEXT k%
ARCHIVER_OFF
a$ = "Restore: "+DATE$+" - Début: "+db$+" Fin: "+TIME$+" sur "+rs$+" "+vol$
fl$ = rs$+"Log.txt": IF FILE_EXISTS(fl$)=0 THEN FILE_OPEN_WRITE 1,fl$: FILE_CLOSE 1
FILE_OPEN_APPEND 1,fl$: FILE_WRITELN 1,a$: FILE_CLOSE 1
IF DIR_EXISTS(rtr$) = 0 THEN DIR_MAKE rtr$
fl$ = rtr$+"Log.txt": IF FILE_EXISTS(fl$)=0 THEN FILE_OPEN_WRITE 1,fl$: FILE_CLOSE 1
FILE_OPEN_APPEND 1,fl$: FILE_WRITELN 1,a$: FILE_CLOSE 1
FILE_OPEN_APPEND 1,fl$: FILE_WRITELN 1,a$: FILE_CLOSE 1
CAPTION 51,CAPTION$(51)+" Fin: "+TIME$
RETURN
' ==============================================================================
Edlist:
' Editer la liste des sauvegardes
EXECUTE_WAIT "Notepad.exe "+flist$
RETURN
' ==============================================================================
SUB Volumes()
' Liste des volumes montés, avec leur nom, séparés par ';' -> volu$
DIM_LOCAL scr$, fv$, a$, q$
IF VARIABLE("volu$") = 0 THEN DIM volu$
scr$ = rtr$+"Vol.vbs": ' script exécutable créé
fv$ = rtr$+"Volumes.txt"
q$ = CHR$(34)
FILE_OPEN_WRITE 1, scr$
FILE_WRITELN 1,"Dim net, shell, computer, fso, WMISet,oWinnt"
FILE_WRITELN 1,"Dim fst, fichier"
FILE_WRITELN 1,"Set fst    = CreateObject("+q$+"Scripting.FileSystemObject"+q$+")"
FILE_WRITELN 1,"Set fichier = fst.CreateTextFile("+q$+fv$+q$+")"
FILE_WRITELN 1,"Set net    = Wscript.CreateObject("+q$+"WScript.Network"+q$+")"
FILE_WRITELN 1,"Set shell  = WScript.CreateObject("+q$+"WScript.Shell"+q$+")"
FILE_WRITELN 1,"Set fso    = WScript.CreateObject("+q$+"Scripting.FileSystemObject"+q$+")"
FILE_WRITELN 1,"computer = net.ComputerName"
FILE_WRITELN 1,"set WMISet = GetObject("+q$+"winmgmts:{impersonationLevel=impersonate}!//"+q$+" & Computer).ExecQuery _"
FILE_WRITELN 1,"("+q$+"SELECT * FROM Win32_LogicalDisk"+q$+")"
FILE_WRITELN 1,"Message = "+q$+""+q$+" "
FILE_WRITELN 1,"For each Disk in WMISet"
FILE_WRITELN 1,"    Capa = Disk.Size"
FILE_WRITELN 1,"    If Capa <> "+q$+""+q$+" Then"
FILE_WRITELN 1,"        Name = Disk.VolumeName"
FILE_WRITELN 1,"        If Message <> "+q$+""+q$+" Then Message = Message & VBCRLF"
FILE_WRITELN 1,"        Message = Message & Disk.Name & "+q$+" "+q$+" & Name"
FILE_WRITELN 1,"    End if"
FILE_WRITELN 1,"Next"
FILE_WRITELN 1,"fichier.WriteLine (Message)"
FILE_WRITELN 1,"fichier.Close"
FILE_WRITELN 1,"wscript.quit"
FILE_CLOSE 1
EXECUTE_WAIT "Wscript.exe " + scr$
FILE_OPEN_READ 9,fv$: volu$ = ""
  WHILE FILE_EOF(9) = 0: FILE_READLN 9, a$: volu$=volu$+a$+";": END_WHILE
FILE_CLOSE 9: FILE_DELETE fv$
volu$ = LEFT$(volu$,LEN(volu$)-1)
END_SUB
' ==============================================================================
SUB Dirinfos(rep$)
' Infos sur un répertoire (mode sans fenêtre noire) -> clipboard sous la forme:
' [nb fichiers];[nb de sous-répertoires];[volume total (octets)]
DIM_LOCAL a$,nf%,nr%,no%,pr$,vb$,q$: vb$ = rtr$+"Vb.vbs": q$ = CHR$(34)
MEMO 975: HIDE 975: WIDTH 975,600
pr$ = "Cmd.exe /c DIR /S /-C "+rep$+" | clip"
FILE_OPEN_WRITE 9, vb$: ' ===== Création du script .vbs =====
  FILE_WRITELN 9,"CreateObject("+q$+"Wscript.Shell"+q$+").Run "+q$+pr$+q$+",0,True"
FILE_CLOSE 9
EXECUTE_WAIT "WSCRIPT.exe "+vb$: ' ===== Exécution du script =====
FILE_DELETE vb$
CLIPBOARD_PASTE 975
a$ = ITEM_READ$(975,COUNT(975)-1)
nf% = VAL(LTRIM$(LEFT$(a$,16))): no% = VAL(LTRIM$(MID$(a$,28,17)))
a$ = ITEM_READ$(975,COUNT(975))
nr% = VAL(LTRIM$(LEFT$(a$,16)))
CLIPBOARD_STRING_COPY STR$(nf%)+";"+STR$(nr%)+";"+STR$(no%)
DELETE 975
END_SUB
' ==============================================================================
SUB MsgOK(x%,y%,tx$)
' Message box tx$ et 'OK' affiché en x%,y%
IF LABEL("Qtmsg") = 0 THEN LABEL Qtmsg
DIM_LOCAL qt%
FORM 900: TOP 900,y%: LEFT 900,x%: WIDTH 900,200: HEIGHT 900,110: BORDER_SMALL 900
  COLOR 900,255,180,180: ON_CLOSE 900,Qtmsg
ALPHA 901: PARENT 901,900: TOP 901,15: LEFT 901,20: FONT_SIZE 901,9
  WIDTH 900,TEXT_WIDTH(tx$,901)+60: CAPTION 901,tx$
BUTTON 902: PARENT 902,900: TOP 902,HEIGHT(900)-65: LEFT 902,WIDTH(900)/2-40
  CAPTION 902,"OK": ON_CLICK 902,Qtmsg
WHILE qt% = 0: PAUSE 200: END_WHILE: DELETE 900: EXIT_SUB
Qtmsg:
qt% = 1
RETURN
END_SUB
' ==============================================================================
L'avantage du stockage au format .zip est de nécessiter un volume moins important pour les sauvegardes.
L'inconvénient est la durée plus importante du temps de traitement (compression et décompression).

Usage:
NB tous les fichiers de travail sont créés dans le répertoire C:\SAUVE\

La rubrique 'Répertoire de sauvegarde' désigne le répertoire qui contiendra l'ensemble des fichiers zip de la sauvegarde dans le volume choisi: X:\SAUVE\

Si le fichier liste des sauvegardes n'existe pas, il sera créé, vide, il faudra le garnir (bouton Edit)
Chaque ligne correspond à un répertoire à sauvegarder, exemple: OUTILS, PANORAMIC, TEXTES, COMPTES\CCP, etc.
(chemin du répertoire à partir de C:)

1) Sauvegarde: cliquer le volume de sauvegarde (clé ou disque externe), puis 'Lancer'
   Les sauvegardes s'effectuent sous forme d'un fichier .zip par répertoire sauvegardé, du nom du répertoire, dans un répertoire SAUVE sous la racine du volume de sauvegarde.
Exemple: OUTILS sera dans C:\SAUVE\OUTILS.zip, COMPTES\CCP dans C:\SAUVE\COMPTES+CCP.zip (\ converti en +)

2) Restore:
Il faut choisir dans la fenêtre supérieure le volume de sauvegarde, s'il contient bien une sauvegarde la liste des fichiers zip incluse s'affiche. Exécution: bouton 'Lancer'

Les opérations sont archivées dans un fichier Log.txt

NB: l'opération de sauvegarde est sans risque. Par contre l'opération de restauration doit évidemment se faire avec
prudence, là on écrase l'existant avec ce qui a été sauvegardé, il vaut mieux ne pas se tromper !

Mise à jour 06/01 14h40


Dernière édition par JL35 le Mer 6 Jan 2016 - 16:39, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5863
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Archivage (fichiers zip)   Mer 6 Jan 2016 - 2:18

C'est en effet une opération qu'il est prudent de faire régulièrement.
Je devrais le faire pour le bien ... mais mes disques de sauvegarde sont toujours pleins pour de mauvaises raisons ...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur En ligne
JL35



Nombre de messages : 6018
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Archivage (fichiers zip)   Mer 6 Jan 2016 - 16:50

En effet, et on ne s'en rend vraiment compte qu'après l'accident, j'ai connu ça fin décembre avec des surtensions à répétitions de la part d'Edf, en pleine nuit, le pc portable de mon épouse y a rendu l'âme, le mien a survécu (y compris la box), grâce je pense à sa prise parafoudre... la moitié ou les trois quarts du matériel électronique de la maison est inutilisable et a été remplacé (chaudière, micro-ondes, téléphones sans fil, décodeurs tnt, automatisme garage, etc. etc.).
Tout ça sur une trentaine de maisons. Une panne (court-circuit avec le 380 V ?) sur le réseau souterrain.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Archivage (fichiers zip)   

Revenir en haut Aller en bas
 
Archivage (fichiers zip)
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Archivage (fichiers zip)
» Hébergement gratuit images photos fichiers
» [Résolu] OE6 : restaurer fichiers .dbx supprimés
» [Résolu] classement des fichiers et dossiers
» Mapsource refuse les fichiers GPX nouvellement créés

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: