Sauvegarde de données

jannoman Messages postés 256 Date d'inscription jeudi 17 avril 2003 Statut Membre Dernière intervention 20 février 2008 - 8 janv. 2006 à 18:11
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 - 8 janv. 2006 à 19:07
Salut !

J'aimerai me faire un peu comme les fichiers *.pst d'outlook : sauvegarder dans un même fichier du texte, des images, ...

Comment faire pour "concaténer" plusieurs fichiers, pour "sortir" un fichier du contenant, ... ?

Merci.
A+.
Thomas.

1 réponse

ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
8 janv. 2006 à 19:07
Ta question est intéressante...

Pas le choix, il faut te créer ton propre format de fichier!
Tu dois savoir que tous fichiers n'est qu'une suite d'octets (8 bits donc) [octets pouvant être représenter par des caractères ASCII]).

Donc, il suffit de récupérer le contenu de chaque fichier via Open en mode Binary :

Dim varPathFichier As String
Dim varCanal As Integer
'Hyper important de déclarer la variable sinon Get ne fonctionnera pas car il ne la déclare pas automatiquement...
Dim varText As String
...
varPathFichier = "C:\MonDossier\MonFichier.ext"
varCanal = FreeFile
Open varPathFichier For Binary As varCanal varText Space(Lof(varCanal)) 'Nbr Octets Variable Nbr Octets Fichier en somme
Get #varCanal, 1, varText 'Récupère l'intégralité du fichier
Close varCanal

Ainsi, varText a le contenu de ton fichier. Bien sûr, ce bout de code est à mettre dans une fonction puisqu'il devra être appelé pour chaque fichié à concaténer !!!

Reste plus qu'a te créer un format de fichier... C'est à dire, une structure.
Déjà, tout fichier a une entête suivie des données (Datas).
Le format du fichié, outre le type de datas, réside dans la structure de l'entête.

Toute entête doit comporter elle même une entête permettant de distinguer ton type de fichier. Si je dis pas de conneries, généralement il est codé sur 2 ou 3 octets.
"JAN" (pour Jannoman ) pourrait parfaitement faire l'affaire. Evidemment, il faut éviter de mette la même chose que les formats standardisés...

Ensuite, il faut dresser la liste des infos que tu veux conserver des fichiers d'origine :
Nom.Ext, Attributs (lecture seule, ...), ...
C'est toi qui choisi bien que, pour les dates, ça risque d'être un peu chaud à reproduire (cf. date de création!!!).

Toutes les données dans l'entête doivent être "compressées" en binaire. Par exemple, pour exprimer le nombre "2005" il ne faudra pas le marquer en toute lettre ce qui demanderait 4 octets.
Non, il faut le traduire en binaire... Mais comme chaque octet ne peut prendre que 256 valeurs (0-255), ben il faut faire comme avec la compisition/décomposition des couleurs RVB (cf. les trop nombreuses sources sur le site) : (N1 * 2^0) + (N2 * 2^1) + (N3 * 2^2) + ...
Ainsi, "2005" doit se décomposer : CHR(7) & CHR(213) enfin, si je me suis pas trompé.

Bref, il faut exprimer toutes les valeurs comme ça (inspire toi du format BMP [qui code les tailles suppérieurs à 256 pixels sur 2 octets...] et des sources d'ici).
Il faut donc, dans ton entête, donner déjà le nombre de fichiers concaténés, puis leurs tailles, leur nom d'origine (...) quitte a éventuellement installer un système de balisage (sous forme d'octets donc... pas de mots!).

Ensuite, tu ouvres un fichier vide, toujours avec Open en mode Binary, tu colles ton entête, tu colles tes fichiers et le tour est joué !

Rien ne t'empêche de rajouter un système de sécurité style bit de parité (cf. CommentCaMarche.com) et le tour est joué!

C'est pas super simple à faire, faut être précis, mais c'est faisable! Et tu peux même compresser voire crypter tes données en te renseignant un peu (toujours sur VBF... y'a plein de sources/forum).

T'en dire plus... oui, je le pourrais. Mais c'est déjà pas mal pour commencer non !
De plus, je suis pas le meilleurs (sur VBF) en la matière donc... place aux experts (Gobillot par exemple )

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
0
Rejoignez-nous