begin process at 2012 02 14 06:03:42
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

 > 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

Note :
9,33 / 10 - par 6 personnes
9,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichier / Disque Source .NET ( DotNet ) Niveau :Débutant Date de création :23/01/2003 Date de mise à jour :23/01/2003 01:14:27 Vu :10 931

Auteur : hvb

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note


 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

Source avec Zip Source avec une capture Source .NET (Dotnet) FOND DE FEUILLE ANIMÉ : DÉGRADÉ MOUVANT POUR ABOUT OU SPLASH...
Source avec Zip Source avec une capture Source .NET (Dotnet) FONT VIEWER : VISIONNEUSE DE POLICES SYSTEMES.
Source avec Zip Source avec une capture Source .NET (Dotnet) HBSNAPSHOTERV3.0 : GESTIONNAIRE DE CAPTURES D'ÉCRAN
Source avec Zip Source avec une capture Source .NET (Dotnet) JEU : PICROSS OU "PUZZLE JAPONAIS"
Source avec Zip Source .NET (Dotnet) [.NET2] COMPRESSION/DÉCOMPRESSION GZIP DE FICHIER GRÂCE À IO...

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) MODIFIER LES EXTENSION DES FICHIERS par okosa
ROUTINE DIR RÉCURSIVE POUR OBTENIR LA LISTE DE TOUS LES FICH... par kerisolde
Source avec Zip Source avec une capture FILE,SECURITY,FICHIER par okosa
Source avec Zip Source avec une capture Source .NET (Dotnet) PATCHEUR DE FICHIER par tototh
Source avec Zip Source avec une capture LECTURE DES INFORMATIONS DES DISQUES COMPOSANT UN ENSEMBLE R... par jack

Commentaires et avis

Commentaire de badconex le 23/01/2003 01:08:47

héhé ton pote samir va être content... c'est bien expliqué en +... jai des petit conseil a te demandé enfin jte send par mail jte met un petit 7.5/10

Commentaire de hvb le 23/01/2003 01:31:46

7.5 ... t'as meme pas lu le code.

Commentaire de AtomWare le 24/01/2003 19:03:48

Moi, je te donne un petit 10 ( bien que ca meriterai + ).
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.

Commentaire de WINACreve le 31/05/2004 07:08:47

Merci Beaucoup c'est exactement ce que je cherchais (10)

Commentaire de ghostm le 20/08/2005 16:00:11

Newbie de chez newbie, j'ai l'intention de me plonger un peu dans VB Express pour un besoin spécifique, et cette petite explication va me faire gagner un temps précieux. Merci !

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 !

Commentaire de EvilGost le 14/03/2007 12:43:25

je te mets 10 parce que la modification de fichier correspond exactement à ce que je cherchais, merc i à toi :)

Commentaire de hvb le 10/04/2007 10:31:12

merci pour vos commentaires.
Un petit raffraichissement du code ne ferait pas de mal, je m'y pencherais après les exams...

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,170 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales