.IMG Dateien auslesen mit VB.NET [Einfach]

  • Hallo liebe Community,
    heute hab ich mal ein kleines Tutorial vorbereitet, indem ich euch erkläre wie man .img (z.B gta3.img) Dateien ausliest mit VB.NET.


    Als erstes erstellen wir ein Projekt (Windows Form Application). Mein Projekt nenne ich IMG_Tutorial.
    Für das Tutorial benötigen wir einen Button, einen ListView und einen OpenFileDialog.
    Habt ihr das hinzugefügt fangen wir als ersten mit dem Form1_load Event an.
    Dort schreiben wir folgendes rein:


    Code
    ListView1.AllowColumnReorder = True
    		ListView1.View = View.Details
    		ListView1.FullRowSelect = True
    		ListView1.Columns.Add("Name", 150, HorizontalAlignment.Left)
    		ListView1.Columns.Add("Offset", 150, HorizontalAlignment.Left)
    		ListView1.Columns.Add("Block Size", -2, HorizontalAlignment.left)
    		OpenFileDialog1.Filter = "IMG-Datei | *.img"


    Über dem Form1_load Event definieren wir noch eine Globale Variabel. Ich nenne sie in dem Tutorial einfach mal "path".

    Code
    Dim path as string


    Wenn wir das getan haben erstellen wir einen Private Sub indem wir die Datei schonmal auslesen lassen.
    Fügt unter eurem letztem "End Sub" folgendes hinzu:



    So als nächstes kommt das Button1_Click Event an die Reihe.
    Dort lassen wir nun das OpenFileDialog erscheinen sodass wir unsere .img Datei auswählen können.


    Code
    If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
    			path = OpenFileDialog1.FileName
    		End If
    		readIMG(path)


    Nun Testen wir unser Programm.
    Das Resultat sollte ungefähr so aussehen:



    Nun wollen wir Natürlich noch den Namen / Offset und die Block Größe auslesen.
    Dazu fügen wir zu unserem readIMG sub unter Me.text += " Einträge!"
    folgendes hinzu:


    Code
    For i = 8 To 11
    				t(1) += CInt(bytes(i))
    			Next
    			For i = 12 To 15
    				t(2) += CInt(bytes(i))
    			Next
    			For i = 16 To 39
    				t(0) += Chr(bytes(i))
    			Next
    			ListView1.Items.Add(New ListViewItem(t))


    Und unter fs.Read(bytes, 0, bytes.Length) definiert ihr das array t(2)


    Code
    dim t(2) as string


    Am ende sollte das Programm euch folgendes ausgeben wenn ihr die gta3.img öffnet:


    Um die Ganze Datei auszulesen braucht ihr eigentlich nur eine For schleife um die letzten 3 For schleifen zu legen. Und statt for i = 8 to 11 könntet ihr variablen einsetzen so ca:
    for i = Offset to Offest + 4
    t(1) += CInt(bytes(i))
    next
    und ganz am ende bevor die große for schleife zu ende ist addiert ihr einfach 32 zu euere Offset Variable.


    So sollte euer Code aussehen wenn ihr alles gemacht habt wie beschrieben und nur den Ersten Eintrag in der IMG Datei lesen wollt:


    Hoffe ich konnte euch helfen. Solltet ihr Probleme haben oder Fehler im Tutorial finden könnt ihr das gerne drunter Posten!


    MfG TheTrust3343