Accueil > > > ACCÉS BINAIRE AUX FICHIERS (ECRITURE,LECTURE). 4 PETITS EXEMPLES SIMPLES EN VB.NET
ACCÉS BINAIRE AUX FICHIERS (ECRITURE,LECTURE). 4 PETITS EXEMPLES SIMPLES EN VB.NET
Information sur la source
Description
Tout ceci est plus ou moins resultat de tatonements. Il y a encore qq trucs qui restent ambigue pour moi aussi, comme le flush, est il necessaire de le faire à chaque fois si on ferme l'objet....
Il y a d'autres moyens encore, je sais, et j'y reviendrais surement. mais il n'y à rien la dessus ici pour l'instant (sauf un exemple d'ecriture de texte...) .
Touts les commentaires sont les bienvenus, mais si ils peuvent etre contructifs, c'est encore mieux.
Source
- 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 ...
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 ...
Conclusion
voila, en esperant que cela puisse servir à d'autres.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio [WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|