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

VB.NET Discussion :

[VB.NET 2005] Fichier binaire et caractère en trop


Sujet :

VB.NET

  1. #1
    Membre habitué Avatar de joefou
    Profil pro
    Inscrit en
    Février 2005
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 248
    Points : 177
    Points
    177
    Par défaut [VB.NET 2005] Fichier binaire et caractère en trop
    Bonjour à tous !

    Je rencontre un soucis ave la création d'un fichier binaire dans lequel j'inscris des instructions à destination d'une imprimante spéciale ; voici le code utilisé:

    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
    28
    29
    30
    31
    32
     
            Try
                If File.Exists(CheminFichier) Then
                    File.Delete(CheminFichier)
                End If
                Fichier = New FileStream(CheminFichier, FileMode.Create, FileAccess.Write)
                BW = New BinaryWriter(Fichier)
                Texte = ChrW(10)
                Texte += "123456"
                Texte += ChrW(29) & "w" & ChrW(0) & ChrW(0)
                Texte += ChrW(29) & "P" & ChrW(1)
                Texte += ChrW(29) & "h" & ChrW(60)
                Texte += ChrW(29) & "H" & ChrW(0)
                Texte += ChrW(29) & "f" & ChrW(0)
                Texte += ChrW(29) & "k" & ChrW(4) & CodeBox.Text.Trim() & ChrW(0)
                Texte += ChrW(10)
                Texte += removeAccents("Libellé produit")
                Texte += ChrW(12)
                BW.Write(Texte)
                BW.Flush()
                Fichier.Flush()
            Catch Iex As Exception
                MsgBox(Iex.Message, MsgBoxStyle.Exclamation)
            Finally
                If Not BW Is Nothing Then
                    BW.Close()
                End If
                If Not Fichier Is Nothing Then
                    Fichier.Close()
                End If
                Fichier = Nothing
            End Try
    Le contenu du fichier ainsi créé est visible sur la pièce jointe (je n'ai pas pu le mettre directement visible dans le message )

    En l'occurrence j'ai toujours un "4" en début de fichier, et je ne l'inscrit nulle part. Qu'ai-je omis dans mon code ?

    D'avance merci !
    Images attachées Images attachées  

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    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 175
    Points : 25 116
    Points
    25 116
    Par défaut
    essaye de gérer toi même les octets puis de faire write(byte())
    et puis il y a des méthodes raccourcis genre system.io.File.writealltext / writeallbytes

    ca évite d'écrire 15 lignes de code

  3. #3
    Membre habitué Avatar de joefou
    Profil pro
    Inscrit en
    Février 2005
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 248
    Points : 177
    Points
    177
    Par défaut
    Merci Pol63, je vais essayer de cette façon et voir ce que cela donne !

  4. #4
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    Je trouve ça bizarre que tu écrives une string dans un fichier binaire.

    => La chaîne est encodée en UNICODE par défaut, on est loin des bytes que tu attends. J'imagine que le "4" en trop, c'est justement un entête qui indique l'encodage, comme on le trouve avec UTF-8.

    Commence par créer un byte[] à partir d'un ANSI.Encoding() de ta string, puis d'envoyer le byte[] tel quel dans le fichier.

  5. #5
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 493
    Points
    5 493
    Par défaut
    Bonjour.

    La chaîne est écrite via un BinaryWriter. Le premier caractère est donc la longueur de la chaîne, ici 52 (le code ASCII pour "4").
    On aurait pu simplement utiliser un TextWriter à la place.

  6. #6
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    Arf

  7. #7
    Membre habitué Avatar de joefou
    Profil pro
    Inscrit en
    Février 2005
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 248
    Points : 177
    Points
    177
    Par défaut
    Merci à tous pour vos indications !

    Alors j'ai finalement inhibé toutes les lignes en rapport avec le BinaryWriter, et j'ai utilisé le code suivant pour inscrire mes données:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                Dim CA As Char() = Texte.ToCharArray()
                For I = 0 To CA.Length - 1
                    Fichier.WriteByte(AscW(CA(I)))
                Next I

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

Discussions similaires

  1. [VB.net 2005] convertir chaine de caractère en type 'date'
    Par kinganasius dans le forum Windows Forms
    Réponses: 1
    Dernier message: 18/07/2006, 23h14
  2. Réponses: 10
    Dernier message: 19/06/2006, 19h04
  3. Réponses: 3
    Dernier message: 07/06/2006, 14h40
  4. Réponses: 1
    Dernier message: 09/03/2006, 17h55
  5. [VB NET 2005] Suppression Fichier
    Par metallicox dans le forum Windows Forms
    Réponses: 6
    Dernier message: 23/11/2005, 15h11

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