[R] Concaténer des fichiers binaires

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
alex65
Niveau 2
Niveau 2
Messages : 24
Enregistré le : ven. 27 juil. 2007 12:30
Status : Hors ligne

[R] Concaténer des fichiers binaires

#1

Message par alex65 »

Bonjour,

Existe-il une fonction qui permet de concaténer plusieurs fichiers binaires ?
C'est pour remplacer cette ligne :
Run(@ComSpec & " /c " & 'copy /b file1.bin + file2.bin + file3.bin file.exe', "", @SW_HIDE)

Merci.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Concaténer des fichiers binaires

#2

Message par Tlem »

Je ne crois pas qu'il existe de fonction toute faite pour ce genre de chose.
Par contre rien ne vous empêche de la créer. :roll:

Il vous faudra ouvrir chaque fichier en mode binaire avec :

Code : Tout sélectionner

$hFile = FileOpen ("Fichier", 16)
Ensuite faire une lecture du fichier :

Code : Tout sélectionner

$bFichier = FileRead ($hFile)
additionner le contenu de la variable à une autre variable :
Fermer la lecture du fichier par :

Code : Tout sélectionner

FileClose($hFile)
Évidemment le tout dans une boucle de traitement de l'ensemble des fichiers envoyés en argument à la fonction.

Ensuite :
Ouvrir sur le même principe que ci dessus (en mode binaire) un nouveau fichier pour écriture.
Écrire le fichier avec le résultat de l'addition des fichiers.
Et enfin fermer le fichier final.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Concaténer des fichiers binaires

#3

Message par sylvanie »

Bonjour,
En effet la méthode décrite par Tlem est la seule également que je connaisee.
Cependant il y a une petite variante dans le cas des gros fichier (genre plusieurs dizaine ou centaines de méga) :

la ligne:

Code : Tout sélectionner

$bFichier = FileRead ($hFile)
 
buffurise tout le fichier en RAM, donc si l e fichier est énorme est que la RAM est insuffisante, ça va ramé massivement.

Pour palier ceci, on peut faire des lectures par paquets, qui sont tout de suite rediriger vers le nouveau fichier en création, grâce à

Code : Tout sélectionner

$bFichier = FileRead ($hFile,1024)
ici je ne lis que 1 Koctet à la fois (pour la fin de fichier , si la quantité restante est inférieure à 1 KO, la fonction s'en débrouille bien)

Il faut par contre l'inclure dans un while, et tester @error = -1 après l'appel à FileRead (détection fin de fichier)
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Concaténer des fichiers binaires

#4

Message par Tlem »

Toujours aussi précis sylvanie. :)
Merci pour lui.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Concaténer des fichiers binaires

#5

Message par sylvanie »

c'est juste du retours d'expérience ^^
Le premier splitter de fichier que je m'étais fait buffurisait tout d'un coups, jusqu'au jour ou je l'ai testé sur des images VMWARE ... (plusieurs gigas ...) :lol:
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
alex65
Niveau 2
Niveau 2
Messages : 24
Enregistré le : ven. 27 juil. 2007 12:30
Status : Hors ligne

Re: [..] Concaténer des fichiers binaires

#6

Message par alex65 »

Merci pour ces explications précises et rapide.

Je viens de tester et ça marche bien.
Par contre concernant la deuxième méthode, est-ce que cela veut dire qu'il faut ouvrir simultanément un des fichier en lecture et le fichier en écriture ? A t-on le droit d'ouvrir plusieurs fichiers en même temps ?
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Concaténer des fichiers binaires

#7

Message par sylvanie »

oui, tout à fait.
Dans le deuxième cas, on ouvre un handle sur un fichier en mode lecture binaire = 0 + 16 et un 2eme handle sur un fichier en écriture binaire = 2 + 16

Sinon en générale, on peut ouvrir plusieurs fichiers à la fois, puisqu'ils ont un handle différent
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
alex65
Niveau 2
Niveau 2
Messages : 24
Enregistré le : ven. 27 juil. 2007 12:30
Status : Hors ligne

Re: [R] Concaténer des fichiers binaires

#8

Message par alex65 »

Bon, merci pour tout, j'allais mettre le "R" mais même là vous êtes à la pointe... c'est déjà fait :o

Juste une dernière petite chose. J'ai utilisé le mode 1+16 pour l'écriture alors que vous mettez 2+16. Ne risque t-on pas de se retrouver avec le dernier fichier plutôt que la somme des tous ?
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [R] Concaténer des fichiers binaires

#9

Message par sylvanie »

la différence entre 2+16 et 1+16 est que (18)écrase le fichier si il existe déjà alors que 17 va l'ouvrir en mode "append" et va continuer à écrire depuis la fin du fichier.
Le mode 18 est parfais dans le cas de céation de nouvau fichiere ou de remplacement, le 17 est plus orienté mise à jour.

Si je devais concaténer plusiieur fichiers, frileusement je crérai un nouveau (mode 18) puis j'y recopierai les autre un à un.
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
alex65
Niveau 2
Niveau 2
Messages : 24
Enregistré le : ven. 27 juil. 2007 12:30
Status : Hors ligne

Re: [R] Concaténer des fichiers binaires

#10

Message par alex65 »

Ok, j'ai compris.
Effectivement, puisqu'on ouvre une seule fois le fichier pour l'écriture c'est plus sûr d'utiliser le mode 18.

Encore merci !
Répondre