[R] Concaténer des fichiers binaires
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[R] Concaténer des fichiers binaires
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.
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.
- Tlem
- Site Admin
- Messages : 11784
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [..] Concaténer des fichiers binaires
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.
Il vous faudra ouvrir chaque fichier en mode binaire avec :
Ensuite faire une lecture du fichier : additionner le contenu de la variable à une autre variable :
Fermer la lecture du fichier par :
É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.
Par contre rien ne vous empêche de la créer.

Il vous faudra ouvrir chaque fichier en mode binaire avec :
Code : Tout sélectionner
$hFile = FileOpen ("Fichier", 16)
Code : Tout sélectionner
$bFichier = FileRead ($hFile)
Fermer la lecture du fichier par :
Code : Tout sélectionner
FileClose($hFile)
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é".
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é".
- sylvanie
- Niveau 11
- Messages : 1556
- Enregistré le : jeu. 26 juil. 2007 21:31
- Localisation : Paris
- Status : Hors ligne
Re: [..] Concaténer des fichiers binaires
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:
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 à
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)
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)
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)
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.
- Tlem
- Site Admin
- Messages : 11784
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [..] Concaténer des fichiers binaires
Toujours aussi précis sylvanie.
Merci pour lui.

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é".
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é".
- sylvanie
- Niveau 11
- Messages : 1556
- Enregistré le : jeu. 26 juil. 2007 21:31
- Localisation : Paris
- Status : Hors ligne
Re: [..] Concaténer des fichiers binaires
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 ...)
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 ...)

Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Re: [..] Concaténer des fichiers binaires
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 ?
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 ?
- sylvanie
- Niveau 11
- Messages : 1556
- Enregistré le : jeu. 26 juil. 2007 21:31
- Localisation : Paris
- Status : Hors ligne
Re: [..] Concaténer des fichiers binaires
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
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.
Re: [R] Concaténer des fichiers binaires
Bon, merci pour tout, j'allais mettre le "R" mais même là vous êtes à la pointe... c'est déjà fait
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 ?

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 ?
- sylvanie
- Niveau 11
- Messages : 1556
- Enregistré le : jeu. 26 juil. 2007 21:31
- Localisation : Paris
- Status : Hors ligne
Re: [R] Concaténer des fichiers binaires
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.
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.
Re: [R] Concaténer des fichiers binaires
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 !
Effectivement, puisqu'on ouvre une seule fois le fichier pour l'écriture c'est plus sûr d'utiliser le mode 18.
Encore merci !