Fusion bit - permet de coller des fichier bout à bout

Soyez le premier à donner votre avis sur cette source.

Vue 3 333 fois - Téléchargée 266 fois

Description

Voilà un programme qui permet de coller des fichiers bout à bout .

Je parrie qu'il en existe pleins , cependant je vous propose ici , une methode qui gére les grosses tailles de fichiers , et qui est performante ...

J'éspére que ce code servira , et sur ce bonne prog à tous .

(source de 8 Ko)

Source / Exemple :


' Pour le projet , voir zip , sinon pour que vous mettiez ce module dans vos programmes 
' il vous faut copier seulement la Fonction Fusion et TailleFic
' Quand à la fonction TailleFic , elle à été codée par : SoulManTo 
' voir ci-dessous pour amples explications
Public Sub fusion(FichierExecutable As String, FichierXla As String, FichierNouveau As String)
On Error GoTo Trap
Dim ExeBuffer As String
Dim XlaBuffer As String
Dim PF1 As Long
Dim PF2 As Long
' Lecture avec Buffer des Fichiers
PF1 = FreeFile()
PF2 = FreeFile()
Open FichierExecutable For Binary Access Read As #PF1
ExeBuffer = Space(LOF(PF1))
Get #PF1, 1, ExeBuffer
Close #PF1
Open FichierXla For Binary Access Read As #PF2
XlaBuffer = Space(LOF(PF2))
Get #PF2, 1, XlaBuffer
Close #PF2
' Ecriture dans un nouveau fichier , ou écraser l'ancien
Open FichierNouveau For Output As #1
Print #1, ExeBuffer & XlaBuffer
Close #1
' Lecture des tailles de fichiers
Dim Taille1 As String
Dim Taille2 As String
Dim Taille3 As String
Taille1 = TailleFic(FichierExecutable)
Taille2 = TailleFic(FichierXla)
Taille3 = TailleFic(FichierNouveau)
MsgBox "Infos sur les fichiers Fusionés :" & vbCrLf & vbCrLf & "Fichier Executable : " & Taille1 & vbCrLf & "Fichier XLA : " & Taille2 & vbCrLf & "Fichier Nouveau : " & Taille3, vbInformation + vbOKOnly, "FUSION..."
' Effacement des Temps
PF1 = FreeFile()
PF2 = FreeFile()
ExeBuffer = Empty
XlaBuffer = Empty
MsgBox "Fusion Réussie !", vbInformation + vbOKOnly, "Ok..."
Exit Sub
Trap:
MsgBox "Erreur : " & vbCrLf & vbCrLf & Err.Description, vbCritical + vbOKOnly, "Erreur " & Err.Number
Err.Clear
Exit Sub
End Sub

Public Function TailleFic(chemin As String) As String
Dim valeur As Variant
Dim unit As String
valeur = FileLen(chemin)
If valeur < 1000 Then
    unit = "octets"
ElseIf valeur / 1024 < 1000 Then
    unit = "Ko"
    valeur = Left(valeur / 1024, 4)
ElseIf valeur / 1024 ^ 2 < 1000 Then
    unit = "Mo"
    valeur = Left(valeur / 1024 ^ 2, 5)
ElseIf valeur / 1024 ^ 3 < 1000 Then
    unit = "Go"
    valeur = Left(valeur / 1024 ^ 3, 4)
End If
TailleFic = valeur & " " & unit
End Function

Private Sub Command1_Click(Index As Integer)
CommonDialog1.ShowOpen
If CommonDialog1.FileName <> Empty Then _
Text1(Index).Text = CommonDialog1.FileName
End Sub

Private Sub Command2_Click()
fusion Text1(0).Text, Text1(1).Text, Text1(2).Text
End Sub

Conclusion :


Fonction TailleFic :

Fonction copiée sur Vbfrance.Com
http://www.vbfrance.com/article.asp?Val=3362
codé par SoulManTo !
Site : http://gregoo.free.fr/accueil.html
Ps : Pas mal le site d'ailleurs !

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_aKheNathOn
Messages postés
575
Date d'inscription
dimanche 23 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2012
-
Cette source est en réponse à la question posée par tdikarimgrps, et j'éspére que ce code lui apporte des réponses ...
Proger
Messages postés
248
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
19 décembre 2008
-
Désolé de devoir contredire l'intitulé, mais ce code est bien pour des fichiers de taille comprise entre 1 octet (lol) et 50Mo chacun (et encore, moi je ne tenterai pas d'ouvrir un fichier de plus de 10Mo avec cette méthode) ET NON pour des "gros" fichiers (genre 600Mo, m'enfin bon pas tout le monde à ca sur sont dur tout les jours... quoique)

Pourquoi ? simple : tu stocke le contenu des fichiers dans 2 variables string. Et là, horreur : un caractère prend 2 octets en mémoire (unicode powa, faut le savoir). Donc si j'ouvre deux big fichier de 40Mo , sa prendra donc 80 + 80 = 160 Mo en mémoire ! mmh c'est pas gentil, ca ... l'excuse "oui mais moi j'ai 256 de ram" est absolument innacceptable (bravo la compatibilité : est-ce sérieux d'écrire "fusion de fichier : nécessite un 486DX avec 512 de ram" ??)
En outre, faire une concaténation de deux string (exebuffer & xlabuffer) lorsque ces string dépasse le Mo, je ne dirais que ça : aargh! - en effet, c'est atroce pour le cpu.

Donc deja : utilisez un tableau de byte !!!!! sa bouffera deux fois moins de mémoire (et c'est aussi facile à utilisé que les strings$)

Et ensuite : ne charger pas Intégralement un fichier en mémoire !!! prenez-en 1Mo par 1Mo et écrivez-là dans la destination, (do ... loop powa)

Puis enfin : si tu recolle un fichier B à la fin d'un fichier A, a quoi sa sert de charger en mémoire le fichier A ? fais une copie du fichier A (filecopy) et rajoute a la fin le fichier B !!! (soit via open "A" for append, soi via open "A" for binary puis seek #,lof("A") )

Bon, je vois que c'est "en réponse à la question posé par..." : peut-être que sa question étais "je charge deux fichier en mémoire : comment je les colle ensemble?" - si c'est le cas, ce code est la réponse (print #, fichierA$ & FichierB$)

PS: m'en veux pas akhenathon ... j'essai d'être constructif...
cs_aKheNathOn
Messages postés
575
Date d'inscription
dimanche 23 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2012
-
:-) Trop bien , ben voilà ce que j'appelle une remarque constructive et je ne t'en veux pas du tout ...

ça serais même cool que les gars qui voient les bugs les expliquent comme toi tu le fais .

Je ne connaissait pas l'utilitée de la variable unicode , donc depuis tj j'ai utilisé des fonctions style comme ça ... (mais bon ça va vite changer grace à toi)

Bon je fais une mise à jour en speed ...

PS : Pas mal la remarque du FileCopy , j'aurais du y penser ...
cs_Patrice99
Messages postés
1222
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018
-
moi je propose la bonne veille commande dos :
copy /b
ça fait la meme chose !
cs_Mike
Messages postés
70
Date d'inscription
lundi 17 décembre 2001
Statut
Membre
Dernière intervention
24 juillet 2004
1 -
euhhh comment on fé pour les desassembler ????, c bien beau de les assembler mais si on peu pas les recuperer ....

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.