Soyez le premier à donner votre avis sur cette source.
Snippet vu 13 006 fois - Téléchargée 45 fois
Imports System.IO 'à mettre en tout debut de votre code 'un exemple tout bidon, une copie de fichier grace a un tableau Private Sub copyfile(ByVal chemin1 As String, ByVal chemin2 As String) Dim hbread As New BinaryReader(File.OpenRead(chemin1)) 'on defini hbread comme BinaryReader, auquel on doit specifier le mode d'ouverture (File.OpenRead) et le chemin du fichier Dim hbwrite As New BinaryWriter(File.OpenWrite(chemin2)) 'on defini hbwrite comme BinaryWriter, auquel on doit specifier le mode d'ouverture (File.OpenWrite) et le chemin du fichier Dim F_array(FileLen(chemin1) - 1) As Byte 'on defini un tableau dont le nbre de cellules est egale a la taille du fichier - 1. -1 car on utilise dans le tableau, l'index 0, que l'on pourra considerer comme l'offset.(l'offset 0x00000000 sera donc dans F_array(0),0x0000000A sera dans F_array(10) etc...) Dim i As Integer hbread.BaseStream.Seek(0, SeekOrigin.Begin) 'defini le pointeur de lecture au debut du fichier (offset 0x00000000, à partir du debut du fichier) 'SeekOrigin defini a partir de ou il doit compter l'offset, on a le choix entre Begin, ous avez compris, End, à la fin du fichier, et Current, la position actuelle du curseur hbread.Read(F_array, 0, FileLen(chemin1)) 'on lit le fichier octet par octet que l'on stocke dans le tableau, on specifie ensuite à partir de quel index du tableau on va copier les fichiers (0), et le nbre d'octets que l'on veux (l'equivalent donc ici, de la taille du fichier) hbwrite.BaseStream.Seek(0, SeekOrigin.Begin) 'defini le pointeur d'ecriture au debut du fichier hbwrite.Write(F_array, 0, FileLen(chemin1)) 'on ecrit le contenu de F_array dans le fichier ouvert en ecriture, vu que l'on veux ecrire tout le tableau, il n'etait pas obligé de specifier l'index de depart et le nbre d'octets. hbread.BaseStream.Flush() 'on libere le buffer hbwrite.BaseStream.Flush() 'on libere le buffer hbwrite.Flush() 'on libere le buffer hbread.Close() 'on ferme l'objet hbwrite.Close() 'on ferme l'objet End Sub 'les valeurs utilisées sont toutes "fictives", c'est juste pour l'exemple écrit, et cela ne correspond à aucune modification speciale de fichiers que j'aurais pu faire : 'voila ca c'est la 1ere methode que j'utilisais pour la modification de fichier 'Ce n'est pas tres propre car je lis le fichier entier à chaque fois, et je le réecris aussi donc entierement 'ce pourtant pour n'acceder qu'à quelques octets, mais cela rend l'accés plus simple (enfin un peu plus clair...) Private Sub modifyfile1(ByVal chemin As String) Dim hbread As New BinaryReader(File.OpenRead(chemin)) Dim F_array(FileLen(chemin) - 1) As Byte hbread.BaseStream.Seek(0, SeekOrigin.Begin) 'defini le pointeur de lecture au debut du fichier hbread.BaseStream.Read(F_array, 0, FileLen(chemin)) 'on lit le fichier octet par octet que l'on stocke dans le tableau, on specifie ensuite à partir de quel index du tableau on va copier les fichiers (0), et le nbre d'octets que l'on veux (l'equivalent donc ici, de la taille du fichier) hbread.BaseStream.Flush() 'on libere le buffer hbread.Close() F_array(10) = &HFF& 'on modifie la valeur de l'index du tableau correspondant à l'offset ou l'on veux modifier le fichier F_array(11) = &HE9& ' "" F_array(16) = &HF9& ' "" F_array(18) = &HA& ' "" 'on veux modifier les 20 derniers octets du fichiers en la valeur hexadecimale FF Dim n As Long For n = F_array.GetUpperBound(0) - 20 To F_array.GetUpperBound(0) F_array(n) = &HFF& Next n 'Maintenant qu'on a modifier toutes nos valeurs dans le tableau, on peut donc le réecrire : Dim hbwrite As New BinaryWriter(File.OpenWrite(chemin)) 'on defini hbwrite comme BinaryWriter, auquel on doit specifier le mode d'ouverture (File.OpenWrite) et le chemin du fichier hbwrite.BaseStream.Seek(0, SeekOrigin.Begin) 'defini le pointeur d'ecriture au debut du fichier hbwrite.Write(F_array) 'on ecrit le contenu de teststr dans le fichier ouvert en ecriture, vu que l'on veux ecrire tout le tableau, il n'est pas obligé de specifier l'index de depart et le nbre d'octets hbwrite.BaseStream.Flush() 'on libere le buffer hbwrite.Flush() 'on libere le buffer hbwrite.Close() End Sub 'et la donc, des methodes un peu plus propre... du moins ca n'ouvre pas le fichier... mais ca y accede + souvent 'modifie des octets du fichier dont on connait l'offset sans le lire : Private Sub modifyfile2(ByVal chemin As String) Dim hbwrite As New BinaryWriter(File.OpenWrite(chemin)) 'on defini hbwrite comme BinaryWriter, auquel on doit specifier le mode d'ouverture (File.OpenWrite) et le chemin du fichier hbwrite.BaseStream.Seek(10, SeekOrigin.Begin) 'on defini le pointeur à l'offset 0x0000000A (10) hbwrite.BaseStream.WriteByte(&HFF&) 'on ecrit notre nouvel valeur : FF en hexa (255) hbwrite.BaseStream.Seek(11, SeekOrigin.Begin) 'on defini le pointeur à l'offset 0x0000000B (11) hbwrite.BaseStream.WriteByte(&HE9&) 'on ecrit notre nouvel valeur : E9 en hexa (233) hbwrite.BaseStream.Seek(16, SeekOrigin.Begin) 'on defini le pointeur à l'offset 0x00000010 (16) hbwrite.BaseStream.WriteByte(&HF9&) 'on ecrit notre nouvel valeur : F9 en hexa (249) hbwrite.BaseStream.Seek(18, SeekOrigin.Begin) 'on defini le pointeur à l'offset 0x00000012 (10) hbwrite.BaseStream.WriteByte(&HA&) 'on ecrit notre nouvel valeur : 0A en hexa (10) 'boucle qui modifie les 20 derniers octets du fichier en FF : Dim x As Long Dim n As Long x = FileLen(chemin) For n = (x - 20) To (x - 1) hbwrite.BaseStream.Seek(n, SeekOrigin.Begin) ' n represente notre offset, donc de taille fichier - 20 jusqu'a la fin du fichier hbwrite.BaseStream.WriteByte(&HFF&) Next hbwrite.Flush() hbwrite.Close() End Sub 'un moyen logiquement plus rapide que la boucle precedente : Private Sub modifyfile3(ByVal chemin As String) Dim F_array(19) As Byte Dim i As Long For i = 0 To F_array.GetUpperBound(0) F_array(i) = &HFF& 'on met les valeurs dans notre tableau avant l'accés au fichier Next i Dim hbwrite As New BinaryWriter(File.OpenWrite(chemin)) 'on defini hbwrite comme BinaryWriter, auquel on doit specifier le mode d'ouverture (File.OpenWrite) et le chemin du fichier hbwrite.BaseStream.Seek(FileLen(chemin) - 20, SeekOrigin.Begin) 'defini le pointeur d'ecriture à l'offset "taille du fichier - 20" hbwrite.Write(F_array) 'on ecrit le tableau hbwrite.BaseStream.Flush() 'on libere le buffer hbwrite.Flush() 'on libere le buffer hbwrite.Close() End Sub 'je suis fatigué, je reviendrais surement la dessus plus tard, il existe encore pas mal de moyen et la lecture n'a pas été tres appronfondie ici... neanmoins je pense que cela reste assez simple, et j'espere que ces exemples pourront ai 'J'ai oublier de mettre comment ajouter des octets à la fin du fichier, je le ferais demain ...
10 avril 2007 à 10:31
Un petit raffraichissement du code ne ferait pas de mal, je m'y pencherais après les exams...
14 mars 2007 à 12:43
20 août 2005 à 16:00
Si on veut modifier un fichier en INSERANT des octets supplémentaires à une place donnée, quel est le plus simple ? Faire un deuxième tableau qui copie le premier jusqu'à l'adresse de début d'insertion, insérer les octets, puis continuer de copier le premier tableau ?
Et pour modifier en SUPPRIMANT des octets ?
Merci pour les conseils !
31 mai 2004 à 07:08
24 janv. 2003 à 19:03
C'est un code clair, bien commenté, facile a comprendre.
J'ai VB.Net depuis 5-6 Mois, et je ne l'ai toujours pas essayé, mais ca me donne envie d'essayer VB.Net, qui est comme meme mieux que VB 6.
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.