Erreur enregistremet listview1 [Résolu]

hacker591 31 Messages postés mardi 10 juin 2014Date d'inscription 14 août 2017 Dernière intervention - 2 sept. 2014 à 13:21 - Dernière réponse : jordane45 22529 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 22 septembre 2018 Dernière intervention
- 9 sept. 2014 à 16:43
Bonjour,
voici en image mon projet :

voici mon code des lecture :
Private Sub ReadFile(FilePath As String)
        Me.ListView1.Items.Clear()
        Dim input As New FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read)
        Dim reader As New BinaryReader(input)
        reader.BaseStream.Position = &H270
        Dim num As Integer = 1
        Dim num2 As Integer = 0
        Do
            Dim position As Long = reader.BaseStream.Position - 10
            Dim hex As Byte() = reader.ReadBytes(8)
            Dim num3 As String = BitConverter.ToString(hex).Replace("-", "")
            Dim hex2 As Byte() = reader.ReadBytes(2)
            Dim num4 As String = BitConverter.ToString(hex2).Replace("-", "")
            reader.BaseStream.Position += 14
            Dim lvi As New ListViewItem("&H" & Conversion.Hex(position))
            lvi.SubItems.AddRange(New String() {Convert.ToString(num3), Convert.ToString(num4)})
            Me.ListView1.Items.Add(lvi)
            num += 1
            num2 = (num2 + 1)
        Loop While (num2 <= &H167)
        reader.Close()
        input.Close()
    End Sub


voici mon code enregistrer :
Private Sub WriteFile(FilePath As String)
Dim output As New FileStream(FilePath, FileMode.Open, FileAccess.Write, FileShare.Write)
Dim writer As New BinaryWriter(output)
writer.BaseStream.Position = &H278
For Each item As ListViewItem In ListView1.Items
writer.Write(item.SubItems(2).Text)
Next
writer.Close()
output.Close()
Interaction.MsgBox("Fichier Sauvegarder.", MsgBoxStyle.Information, "")
End Sub

Mon probléme, c'est quand je modifier le code couleur (ex : 2 colonne 0000 par 9999) et j'enregistre. quand je vérifie mon fichier HXD.
voici en image ce que me donne quand j'enregistre:

voici mon fichier originale :


Comment faire pour enregistrer dans Listview1 en hex.
Pouvez-vous m'aider a corriger ce petit problème?
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
vb95 1663 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 septembre 2018 Dernière intervention - 6 sept. 2014 à 21:04
1
Merci
voici le code complet pour la feuille Form1
Fair en vrai VB net sans la référence à Microsoft.Visual.Basic dans les références du projet ! Cette référence ne sert que pour la compatibilité avec les anciens codes VB 6 en utilisant la syntaxe VB6
J'utilise VB Net 2013 Express ! mon code est-il compatible à 100% avec ta version de VB net ! Je pense que oui ! Dans le cas contraire dis-moi quelle est ta version de VB net !


Imports System.IO

Public Class Form1

Private FilePath As String
Private codehex(0 To 7) As Byte
Private couleurhex(0 To 1) As Byte

Private Sub OuvrirToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles OuvrirToolStripMenuItem.Click

Dim open As New OpenFileDialog
open.Filter = "FICHIER PS3 |SYS-DATA"
If open.ShowDialog = Windows.Forms.DialogResult.OK Then
FilePath = open.FileName
ReadFile(FilePath)
Else
MessageBox.Show("Fichier non chargé", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning)
End If

End Sub

Private Sub ReadFile(FilePath As String)

ListView1.Items.Clear()
Dim input As New FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read)
Dim reader As New BinaryReader(input)
reader.BaseStream.Position = 16
For i = 0 To 16
Dim position As Long = reader.BaseStream.Position - 10
Dim code As String = BitConverter.ToString(reader.ReadBytes(8)).Replace("-", "")
Dim couleur As String = BitConverter.ToString(reader.ReadBytes(2)).Replace("-", "")
reader.BaseStream.Position += 14
Dim lvi As New ListViewItem("&H" & position.ToString("X4"))
lvi.SubItems.AddRange(New String() {code, couleur})
ListView1.Items.Add(lvi)
Next
reader.Close()
input.Close()
TextBox1.Text = String.Empty
TextBox1.Refresh()

End Sub

Private Sub EnregistrerToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles EnregistrerToolStripMenuItem.Click

Dim output As New FileStream(FilePath, FileMode.Open, FileAccess.Write, FileShare.Write)
Dim writer As New BinaryWriter(output)
writer.BaseStream.Position = 16
For Each item As ListViewItem In ListView1.Items
Dim position As Long = writer.BaseStream.Position - 10
Dim code As String = item.SubItems.Item(1).Text ' chaine code en héxadécimal
Dim couleur As String = item.SubItems.Item(2).Text ' chaine couleur en héxadécimal
codehex = converthex(code, codehex) ' on convertit la chaine héxa-ASCII en un tableau de 8 octets
couleurhex = converthex(couleur, couleurhex) ' on convertit la chaine héxa-ASCII en un tableau de 2 octets
writer.Write(codehex) ' on écrit les 8 octets du code la voiture
writer.Write(couleurhex) ' on écrit les 2 octets de la couleur de la voiture
writer.BaseStream.Position += 14
Next
writer.Close()
output.Close()
MessageBox.Show("Fichier sauvegardé", "", MessageBoxButtons.OK, MessageBoxIcon.Information)

End Sub

Private Function converthex(chaine As String, octets() As Byte) As Byte()

For i = 0 To (chaine.Length / 2) - 1
octets(i) = Convert.ToByte(chaine.Substring(i * 2, 2), 16)
Next
converthex = octets

End Function

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

If ListView1.SelectedItems.Count > 0 Then
TextBox1.Text = TextBox1.Text.ToUpper
Dim couleurhex As String = TextBox1.Text
If couleurhex.Length <> 4 Or String.IsNullOrWhiteSpace(couleurhex) = True Then
MessageBox.Show("La couleur saisie doit comportée 4 caractères héxadécimaux", "", MessageBoxButtons.OK, MessageBoxIcon.Warning)
TextBox1.Text = String.Empty
TextBox1.Refresh()
Exit Sub
End If
For i = 0 To 3
Dim caractere As String = couleurhex.Substring(i, 1)
If (caractere >= "0" And caractere <= "9") Or (caractere >= "A" And caractere <= "F") Then
For Each item As ListViewItem In ListView1.SelectedItems
item.SubItems(2).Text = couleurhex
Next
Else
MessageBox.Show("Les caractères ne sont pas tous héxadécimaux (de 0 à 9 et de A à F)", "", MessageBoxButtons.OK, MessageBoxIcon.Warning)
TextBox1.Text = String.Empty
TextBox1.Refresh()
End If
Next
Else
MessageBox.Show("Aucune sélection faite dans la liste", "", MessageBoxButtons.OK, MessageBoxIcon.Warning)
TextBox1.Text = String.Empty
TextBox1.Refresh()
End If

End Sub

Private Sub ListView1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListView1.SelectedIndexChanged

If ListView1.SelectedItems.Count > 0 Then
For Each item As ListViewItem In ListView1.SelectedItems
TextBox1.Text = ListView1.SelectedItems(0).SubItems(2).Text.ToUpper
Next
End If
End Sub

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

End Sub
End Class

Merci vb95 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de vb95
cs_Le Pivert 5357 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 22 septembre 2018 Dernière intervention - 2 sept. 2014 à 15:14
0
Merci
Bonjour,

Essaie ceci:

    Dim bf As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter()
Private Sub ReadFile(ByVal FilePath As String, ByVal list As ListView)
'Lire la liste
        If File.Exists(FilePath) Then
            Using fs As New System.IO.FileStream(FilePath, IO.FileMode.Open)
                List.Items.AddRange(bf.Deserialize(fs).ToArray(GetType(ListViewItem)))
            End Using
        End If
    End Sub
    Private Sub WriteFile(ByVal FilePath As String, ByVal list As ListView)
        ' Sauver la liste
        Using fs As New System.IO.FileStream(FilePath, IO.FileMode.Create)
            bf.Serialize(fs, New ArrayList(list.Items))
        End Using
    End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
  'adapter listview     
 ListVpath.View = View.Details
        ListVpath.Columns.Add("Noms", 150, HorizontalAlignment.Left)
        ListVpath.Columns.Add("Chemin", 350, HorizontalAlignment.Left)
        ListVpath.Items.Clear()
        ReadFile("Chemin fichier.txt", ListVpath)'adapter listview
    End Sub
    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        WriteFile("Chemin fichier.txt", ListVpath)'adapter listview
    End Sub

Commenter la réponse de cs_Le Pivert
0
Merci
Bonjour,

avez-vous une solution avec WriteFile pour enregistrer seulement:
item.SubItems(2).Text

par rapport a mon code de lecture comment enregistrer dans WriteFile?
Merci pour votre aide.
Commenter la réponse de hacker591
vb95 1663 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 septembre 2018 Dernière intervention - 6 sept. 2014 à 08:51
0
Merci
il vient d'où ton fichier HXD ? et que représente-t-il et comment le crées-tu ?
Commenter la réponse de vb95
vb95 1663 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 septembre 2018 Dernière intervention - 6 sept. 2014 à 12:59
0
Merci
writer.Write(item.SubItems(2).Text)

cette ligne inscrit le texte de l'item de la listview dans le fichier et nom les valeurs héxadécimales que ce texte représente

si tu as 20 en héxadécimal soit 32 en décimal comme valeur dans la listview le Write met dans le fichier les valeurs héxa 32 et 30 ( soit les codes ASCII des chiffres 2 et 0)
il faut passer par l'écriture d'octets directement et par par l'écriture de texte !
Commenter la réponse de vb95
hacker591 31 Messages postés mardi 10 juin 2014Date d'inscription 14 août 2017 Dernière intervention - Modifié par hacker591 le 6/09/2014 à 15:12
0
Merci
bonjour,
Voici le lien de mon projet : http://www.mediafire.com/download/b0b1a0931q56sp5/teste+1.rar

Pouvez-vous regarder mon projet, j'ai un probléme enregistrement par rapport mon fichier DATA. N'oublier pas faire une double copie du fichier DATA.
Merci
Commenter la réponse de hacker591
vb95 1663 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 septembre 2018 Dernière intervention - 6 sept. 2014 à 17:24
0
Merci
ton souci est résolu chez moi !
le code couleur est une valeur en héxadécimal sur 2 octets ( donc 4 caractères héxadécimaux )
Commenter la réponse de vb95
hacker591 31 Messages postés mardi 10 juin 2014Date d'inscription 14 août 2017 Dernière intervention - Modifié par hacker591 le 6/09/2014 à 18:12
0
Merci
pouvez-vous me dire comment vous avez écrire le code? Merci de votre réponse
Commenter la réponse de hacker591
vb95 1663 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 septembre 2018 Dernière intervention - 6 sept. 2014 à 21:05
0
Merci
il faut lite "Fait en VB net" et non "Fair en VB net"
Excuse
Commenter la réponse de vb95
0
Merci
Merci vb95,

grâce a toi, tu as résolu a un probléme depuis deuxième semaine que je suis dessus.

Merci encore,
Commenter la réponse de hacker591
vb95 1663 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 septembre 2018 Dernière intervention - 6 sept. 2014 à 22:58
0
Merci
De rien !
Tout le plaisir est pour moi aussi !
N'oublie pas de clcquer sur "Problème résolu" stp !
Commenter la réponse de vb95
vb95 1663 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 septembre 2018 Dernière intervention - 6 sept. 2014 à 23:37
0
Merci
Modifie le code de cette procédure ainsi !
Risque d'erreur si saisie de caractères non héxadécimaux car on modifie tout de même la couleur dans la listview


Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

If ListView1.SelectedItems.Count > 0 Then
TextBox1.Text = TextBox1.Text.ToUpper
Dim couleurhex As String = TextBox1.Text
If couleurhex.Length <> 4 Or String.IsNullOrWhiteSpace(couleurhex) = True Then
MessageBox.Show("La couleur saisie doit comportée 4 caractères héxadécimaux", "", MessageBoxButtons.OK, MessageBoxIcon.Warning)
TextBox1.Text = String.Empty
TextBox1.Refresh()
Exit Sub
End If
Dim ok As Integer = 0
For i = 0 To 3
Dim caractere As String = couleurhex.Substring(i, 1)
If (caractere >= "0" And caractere <= "9") Or (caractere >= "A" And caractere <= "F") Then
ok += 1
Else
MessageBox.Show("Les caractères ne sont pas tous héxadécimaux (de 0 à 9 et de A à F)", "", MessageBoxButtons.OK, MessageBoxIcon.Warning)
TextBox1.Text = String.Empty
TextBox1.Refresh()
End If
Next
If ok = 4 Then
For Each item As ListViewItem In ListView1.SelectedItems
item.SubItems(2).Text = couleurhex
Next
End If
Else
MessageBox.Show("Aucune sélection faite dans la liste", "", MessageBoxButtons.OK, MessageBoxIcon.Warning)
TextBox1.Text = String.Empty
TextBox1.Refresh()
End If

End Sub
Commenter la réponse de vb95
hacker591 31 Messages postés mardi 10 juin 2014Date d'inscription 14 août 2017 Dernière intervention - Modifié par hacker591 le 9/09/2014 à 16:17
0
Merci
Merci de votre réponse,

Je voudrais savoir c'est possible arrêter de lire quand il y a 16 zéros automatique en hex?

For i = 0 To 16


Merci de votre réponse.
jordane45 22529 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 22 septembre 2018 Dernière intervention - 9 sept. 2014 à 16:43
Bonjour,

1 - Quel est le rapport entre cette ligne de code :
For i = 0 To 16
... et ta question ?


2 - De toutes façons...Ta question initiale : Enregistrement de tes valeurs en Hexa dans ton fichier.... est résolue non ??
Si oui... Merci de mettre ce sujet en RESOLU puis d'ouvrir une nouvelle discussion pour ta nouvelle question.
Commenter la réponse de hacker591

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.