IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Lecture/Ecriture en binaire


Sujet :

Windows Forms

  1. #1
    Membre habitué Avatar de benito9253
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 205
    Points : 196
    Points
    196
    Par défaut Lecture/Ecriture en binaire
    Bonjour,
    je n'ai encore rien fait en binaire je me perd un peu dans tout ce que j'ai pu trouver sur internet...
    Ce que je voudrais faire c'est écrire dans un fichier texte deja existant, sans remplacer son contenu, a partir du texte saisi dans un TextBox, et faire aussi l'inverse c'est à dire lire un fichier texte en binaire pour l'afficher dans un TextBox. Le tout écrit en Vb.Net.
    Je voudrais aussi pouvoir afficher le code binaire directement dans un TextBox sans l'écrire sous forme de texte.

    Quelqu'un sait il comment faire ?

    merci d'avance

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    si c'est pour mettre dans un textbox, ca paraitrait logique de traiter le fichier en texte

    m'enfin si tu veux juste voir binairement ce qu'il y a dedans ca reste faisable

    il faut utiliser un System.IO.FileStream
    tu peux lire un fichier, ou écrire un fichier (soit en mode rewrite soit en mode append)
    et donc tu récupères ou écris des octets directement ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre habitué Avatar de benito9253
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 205
    Points : 196
    Points
    196
    Par défaut
    j'ai essayé avec FileStream ca marche sans problème pour l'écriture. Par contre quand je veux lire le contenu du fichier ca m'affiche bien des valeurs dans le TextBox mais ce ne sont pas des valeurs binaires.

    Ex: s'il y a le fichier contient le caractère "a", le TextBox va afficher: "970"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            pathFile = "C:\ecrireBinaire.txt"
            Dim TailleOctets As Long = GetFileLength(pathFile)
            If Not File.Exists(pathFile) Then
                File.Create(pathFile)
            End If
            Dim fs2 As FileStream = File.OpenRead(pathFile)
            For i = 0 To TailleOctets
                Try
                    valByte = fs2.ReadByte()
                    totalByte = totalByte & valByte
                Catch ex As Exception
                End Try
            Next
            fs2.Close()
            TextBox3.Text = totalByte
        End Sub
     
    'cette fonction me sert juste a trouver la taille en octets du fichier
        Function GetFileLength(ByVal sPathFile As String) As Long
            Dim oFile As New System.IO.FileInfo(sPathFile)
            Dim lRet As Long
            If oFile.Exists Then lRet = oFile.Length Else lRet = -1
            oFile = Nothing
            Return lRet
        End Function
    End Class
    Est ce qu'il y a moyen d'afficher la valeur en binaire uniquement?

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    tu veux des 1 et des 0 ? des octets ? de l'hexadecimal ?


    quels sont les types de valbyte et totalbyte dans ton code ? (string ?)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre habitué Avatar de benito9253
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 205
    Points : 196
    Points
    196
    Par défaut
    je voudrais obtenir des 0 et des 1
    et j'ai déclaré valByte et totalByte en tant que string

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    readbyte te permet d'obtenir des octet, pas des bit

    regarde la classe bitconverter si elle peut te donner les bit de l'octet, que tu pourras ensuite ajouter au string

    nb : pour de la concaténation, la classe system.text.stringbuilder est beaucoup plus rapide qu'un string qui est obligé de réallouer de l'espace mémoire à chaque concaténation
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre habitué Avatar de benito9253
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 205
    Points : 196
    Points
    196
    Par défaut
    Il semblerait que la classe BitConverter ne marche qu'avec les tableau de byte, mais je ne sais pas comment en faire un avec le code que j'ai utilisé.

    Est ce qu'il n'existe pas de fonction pour lire bit par bit directement?

    Sinon est ce que tu pourrais donner un exemple d'utilisation de la classe system.text.stringbuilder car je ne m'en suis jamais servit et je ne vois pas comment faire.

    merci beaucoup pour les réponses

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    pour le stringbuilder :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim sb as new system.text.Stringbuilder
    sb.append(chaine)
    sb.appendline(chaine) ' en plus ca rajoute un vbcrlf au bout
    dim s as string = sb.tostring
    sur le stringbuilder il y a aussi des méthodes replace et autres fonctions courantes sur les string ....



    bitconverter doit en effet servir à convertir des données en octet et non en bit
    et vu que tu as déjà des octets ...


    après pour avoir les bit, il y a des tas de méthodes, on en trouve plein sur le net/google,
    moi j'aurais pensé à des masques binaires (if octet and 255 = 255 ca veut dire que le bit 7 est à 1 sinon il est à 0)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre habitué Avatar de benito9253
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 205
    Points : 196
    Points
    196
    Par défaut
    ca marche!!!
    merci beaucoup Pol63

    Juste une dernière question:
    je voudrais cette fois faire l'inverse, c'est a dire écrire dans un fichier texte en ne connaissant que la valeur de l'octet, sans convertir la lettre(par exemple pour "a" c'est 97).

    J'ai essayé ce code mais le fichier reste vide...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            Dim fs1 As FileStream =  File.OpenWrite(pathFile)
            Dim byte1(97) As Byte '97 correspond a la valeur de l'octet qui correspond à un "a" sans espace
            fs1.Write(byte1, 0, 1)
            fs1.Close()

  10. #10
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    chr et asc peuvent surement t'aider
    chr(valeur as byte) retourne le caractère ascii du code
    et asc c'est l'inverse, ca retourne le code ascii d'un caractère
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Membre habitué Avatar de benito9253
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 205
    Points : 196
    Points
    196
    Par défaut
    Ce n'est pas ca le problème, c'est que quelque soit la valeur que j'utilise (et a priori pour a ce devrait bien etre "97") le fichier dans lequel je suis sensé écrire n'est même pas modifié.
    Comment se fait il que cela ne marche pas?

  12. #12
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    File.OpenWrite n'ouvre pas le fichier en mode append, donc ca écrit pas à la suite du fichier
    donc si tu vois toujours la meme chose dedans en écrivant toujours la meme chose dedans c'est normal
    si c'est pas ton cas c'est plus embêtant ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  13. #13
    Membre habitué Avatar de benito9253
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 205
    Points : 196
    Points
    196
    Par défaut
    bin c'est justement parce que c'est embêtant que je demande si quelqu'un n'a pas une solution...
    Parce que justement lorque mon fichier est vide et que j'execute le code (celui un peu plus haut) il reste vide...

  14. #14
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    alors essaye system.io.file.writeallbytes(fichier,octets())
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  15. #15
    Membre habitué Avatar de benito9253
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 205
    Points : 196
    Points
    196
    Par défaut
    J'ai enfin trouvé le problème...qui été du à une double erreur de ma part

    Premièrement j'avais une partie de mon code sensé géré d'éventuelles erreurs qui me faisait sortir de la procédure qui contenait le code écrivant dans le fichier...

    Ensuite j'ai fait une erreur pour l'assignation de la valeur des byte a ma variable. Il faut utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            Dim fs1 As FileStream =  File.OpenWrite(pathFile)
            Dim byte1() As Byte = {97} 'et non pas comme j'avais mis: "Dim byte1(97) As Byte"
            fs1.Write(byte1, 0, byte1.Length)
            fs1.Close()
    Voila les problèmes sont donc réglés

    En tout cas merci beaucoup pour tes réponse Pol63, ca m'a énormément aidé!!!

  16. #16
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    et avant de dire qu'un code ne fait pas ce qu'il faut, il faut faire de l'execution pas à pas, ca aide à comprendre ce qu'il se passe ^^
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lecture et ecriture fichier binaire
    Par gedonet dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 20/04/2009, 19h51
  2. lecture ecriture fichier binaire
    Par jonckers dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/04/2007, 09h12
  3. Lecture ecriture dans un fichier binaire
    Par laetous dans le forum C
    Réponses: 13
    Dernier message: 26/08/2006, 08h50
  4. ouverture/lecture/ecriture dans un fichier en mode binaire
    Par dirty_boy dans le forum Débuter
    Réponses: 2
    Dernier message: 15/03/2006, 08h38
  5. [fichier binaire]lecture ecriture dump
    Par parsy dans le forum Langage
    Réponses: 7
    Dernier message: 10/08/2005, 18h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo