Créer un fichier container pour enregistrer un dossier complet
On a souvent besoin d'enregistrer un dossier complet, par exemple une page web avec ses images, une animation avec images et son, une série de documents relatifs au même sujet, des fichiers liés entre eux...
Le plus souvent, on utilise le logiciel gratuit WinZip qui présente en outre l'avantage de compresser les fichiers.
Quelques petits inconvénients :
- il faut installer le logiciel à la fois sur le PC qui crée le fichier archive et sur le PC qui va le lire (mais on peut faire des fichiers WinZip "auto-extractibles")
- la lecture des fichiers nécessite une étape préliminaire de décompression
- mais surtout, le système est difficilement personnalisable.
Dans certains cas, il peut être utile d'utiliser un petit bricolage vbs qui offre une très grande souplesse (le code est très facile à adapter à tous les besoins).
Notre fichier "container" vbs est un fichier dont la première partie contient le script vbs servant à reconstituer le répertoire, et la seconde contient tous les octets de tous les fichiers du répertoire.
A l'ouverture du fichier, le script est lancé et va lire la partie "octets" et l'utiliser pour recréer l'arborescence des répertoires et les fichiers.
Rien n'empêche évidemment d'ajouter quelques lignes de codes qui vont ouvrir l'un des fichiers reconstitués ou bien lancer un fichier son...
Le chargement du groupe de fichiers ou du répertoire et de ses fichiers et sous-répertoires dans un fichier container vbs est bien entendu effectué par un VBScript (à télécharger en fin de page).
Ce petit logiciel (9 ko) permet de stocker dans un fichier container n'importe quel répertoire (attention toutefois, au delà d'une certaine taille, les opérations peuvent prendre du temps).
Un exemple, une animation Excel qui fonctionne avec une série de fichiers son : la balancoire (cliquez ici pour voir les explications sur l'animation Excel).
Pour voir directement l'animation, cliquez ici (Attention, 270 ko. En outre, certaines protections anti-virus peuvent vous empêcher de lancer directement le script).
A défaut, vous pouvez télécharger le script sous forme zippée en cliquant ici
Comment ça marche ? cliquez ici
Le fichier "container"
Le fichier container vbs contient toutes les informations prmettant de reconstituer l'arborescence des répertoires, sous-répertoires et fichiers.
Il est organisé en deux parties,
- une partie Script qui contient toutes les instructions pour reconstituer les fichiers
- une partie "octets" qui contient la structure de l'arborescence des répertoires et fichiers et les octets constituant chaque fichier.
La séparation se fait par des "tags" qui permettent au script de repérer le début et la fin des fichiers.
Dans l'exemple container_mpfe.vbs, on trouve, en dessous du script, les lignes suivantes :
'REPERTOIRE
'mpfe
'REPERTOIRE
'mpfe\photos
'REPERTOIRE
'mpfe\frequentation
L'arborescence des répertoires comporte deux niveaux : un répertoire mpfe et deux sous répertoires photos et frequentation. (Notez les apostrophes précédant chaque ligne pour éviter qu'elle ne soit interpretée comme une commande vbscript).
Les lignes suivantes définissent les fichiers (adresse et contenu) :
'FICHIER1
'mpfe\photos\mpfe_mai2002.html
'<HTML><BODY BGCOLOR='WHITE'><img src="mpfe_mai2002.jpg" width='100%'>
'</BODY>
'</HTML>'FINFICH1
'FICHIER2
'mpfe\photos\mpfe_mai2002.jpg
'ÿØÿàØê¿1Íÿ.......... octets du fichier jpg................
...........saWÿÙ'FINFICH2
'FICHIER3
'mpfe\photos\mpfe_oct2001.html
'<HTML><BODY BGCOLOR='WHITE'><img src="mpfe_oct2001.jpg" width='100%'>
.......... octets du fichier html................
'</HTML>'FINFICH3
'FICHIER4
'mpfe\photos\mpfe_oct2001.jpg
.......... octets du fichier jpg................
.......æÅ_ÿÙ'FINFICH4
(le répertoire stocké dans container_mpfe.vbs contient en fait 9 fichiers).
Les sauts de ligne présents dans les octets du fichier ont été suivis d'une apostrophe (en début de ligne) afin d'éviter que VBScript cherche à interpreter les octets comme des commandes vbscript.
Le rôle de la partie vbscript est simplement d'utiliser ces informations sur les fichiers et répertoires pour les reconstituer.
Les commandes principales sont :
- choix de l'endroit oû va être reconstitué le répertoire :
repacc=inputbox("saisir l'adresse du répertoire dans lequel le fichier doit être copié",,replace(Wscript.Scriptfullname,Wscript.ScriptName,""))
if right(repacc,1)<>"\" then repacc=repacc & "\"
- création de l'arborescence des répertoires :
Auto-ouverture en lecture du fichier script en cours d'execution, lecture ligne par ligne
à la recherche des tags 'REPERTOIRE, lecture de la ligne suivant le tag et contenant
le nom et l'adresse (relative) du répertoire, création du répertoire en
utilisant createfolder :
Set fs = CreateObject("Scripting.FileSystemObject")
Set fichsource = fs.OpenTextFile(Wscript.ScriptFullName, 1,False)
do while not fichsource.atendofstream '--------balayer les répertoires
'rechercher le tag répertoire
do while txt<>"'REPERTOIRE" and not fichsource.atendofstream
txt=fichsource.readline
loop
'récupérer le nom du répertoire
if not fichsource.atendofstream then
txt=fichsource.readline 'lire le nom du répertoire
txt=right(txt,len(txt)-1) 'retirer l'apostrophe
fs.createfolder(repacc & txt) 'créer le répertoire
end if
loop '--------répertoire suivant
- recherche des fichiers de la même façon que les répertoires, en bouclant sur le numéro du fichier (numfich) :
do while not instr(txt,"'FICHIER" & numfich)>0 and not fichsource.atendofstream
txt=fichsource.readline
loop
txt=fichsource.readline 'lire le nom du fichier
Le fichier est créé par OpenTextFile
set fich=fs.OpenTextFile(repacc & right(txt,len(txt)-1),2,true)
- recopie des octets du fichier :
On lit les octets par paquets (pour gagner du temps) jusqu'à trouver FINFICH. Avant de recopier les octets lus, on retire les apostrophes de début de ligne :
do while not instr(txte,"'FINFICH" & numfich)>0
txte=""
on error resume next 'teste la fin du fichier
txte=fichsource.read(4*1024)
if txte="" then txte=fichsource.readall
on error goto 0
if instr(txte,"'FINFICH" & numfich)>0 then
txte=left(txte,instr(txte,"'FINFICH" & numfich)-1)
txte=replace(txte,chr(13) & "'",chr(13))
txte=replace(txte,chr(10) & "'",chr(10))
fich.write txte
loop 'boucler à la recherche de la fin du fichier
(présentation simplifiée).
Une fois tous les fichiers recopiés, le répertoire stocké dans le vbs a été completement reconstitué, avec tous ses sous-répertoires et fichiers.
Cliquez ici pour télécharger l'exemple container_mpfe.vbs (vbs zippé).
Création du fichier "container"
Pour créer le fichier container, il faut d'abord créer un nouveau fichier
vbs vierge, y recopier les instructions vbscript (première partie du fichier container),
copier les noms et adresses (relatives) des répertoires et fichiers à enregistrer,
puis copier tous les octets de tous les fichiers.
C'est un fichier VBScript (cree_container.vbs, à télécharger) qui se charge de ces opérations.
La partie script (première partie du container vbs) est stockée
à la fin du fichier cree_container.vbs, séparée du reste par un tag "'RESTAURATION".
Chaque ligne du script de restauration est précédée d'une apostrophe pour empêcher son execution au moment de la création du fichier container.
Les principales phases du script :
- choix du répertoire à recopier (l'utilisateur doit saisir le nom du fichier avec son chemin d'accès)
- crétion d'un fichier vbs vierge enregistré sous le nom container_zaza.vbs (si zaza est le nom du répertoire à enregistrer) dans le même dossier que zaza.
- recopie dans le fichier container_zaza.vbs du script de restauration des fichiers (qui se trouve en bas du fichier cree_container.vbs), en prenant soin de retirer les apostrophes
qui précèdent chaque ligne.
- ajout de la liste des répertoires
- ajout des noms et adresses (relatives) de chacun des fichiers
- recopie des octets de chacun des fichiers en prenant soin d'ajouter une apostrophe à chaque début de ligne (pour transformer les octets enregistrés en simples commentaires)
- ouverture du répertoire contenant le dossier à recopier et sa copie dans l'Explorateur Windows pour que l'utilisateur constate le succès de l'opération.
L'utilisateur n'a besoin que de lancer le logiciel (à télécharger ci-dessous) et de saisir l'adresse du répertoire à enregistrer.
En quelques secondes, le dossier est stocké dans un fichier container vbs.
Ce fichier container peut être envoyé par mail (attention aux serveurs qui filtrent les vbs en pièce jointe), placé dans un autre répertoire ou sur un autre ordinateur. Il suffit de l'ouvrir pour reconstituer une copie du répertoire initial.
Cliquez ici pour accéder au Script "cree_container.vbs"
Cliquez ici pour accéder au texte du script
Cliquez ici pour accéder au Script zippé
Cliquez ici pour voir l'exemple mpfe.vbs (fichier container zippé)
Cliquez ici pour voir l'exemple balancoire.vbs (fichier container zippé)