String array (aus bytes) wieder in datei umwandeln

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    String array (aus bytes) wieder in datei umwandeln

    Hi, kann mir evtl einer helfen, wär cool, hab auch schon selbst vieles probiert (bin momentan noch auf kein ergebnis gekommen).
    Wie die "Überschrift" schon beschreibt lese ich aus einer datei die bytes aus (in eine string array) und will diese string array aus bytes wieder in eine datei (.exe) umwandeln.

    Der auslese teil des project klappt schonmal ganz gut:

    VB.NET-Quellcode

    1. 'Global
    2. Dim FilePath As String = "D:\test\test.exe"
    3. Dim public_sb As String
    4. 'in der funktion
    5. 'Datei in bytes (trennzeichen / )
    6. Dim FileBytes() As Byte = My.Computer.FileSystem.ReadAllBytes(FilePath)
    7. Dim sb As New System.Text.StringBuilder(FileBytes.Length * 4)
    8. For Each bt As Byte In FileBytes
    9. sb.Append(bt.ToString())
    10. sb.Append("/"c)
    11. Next
    12. public_sb = sb.ToString()


    edit://
    mein ansatz zum datei schreiben sah so aus.. geht aber ned

    VB.NET-Quellcode

    1. 'string in array
    2. Dim _bytes As String = public_sb
    3. Dim _byte_array() As String
    4. _byte_array = _bytes.Split("/")
    5. Dim oFileStream As System.IO.FileStream
    6. oFileStream = New System.IO.FileStream("bytes.exe", System.IO.FileMode.Create)
    7. For Each byte_in_file As String In _byte_array
    8. oFileStream.WriteByte(byte_in_file)
    9. Next
    10. oFileStream.Close()


    end edit:||

    soweit so gut,.. und jetzt zum schreiben der datei mit hilfe von public_sb, weis ich nicht mehr weiter, habe gegoogled usw, nebenbei auch das gefunden : example-code.com/vbdotnet/save-byte-array.asp
    hilft mir aber nicht, ich komm einfach nicht drauf, würde mir evtl einer zeigen wies richtig geht? wär sehr nett! :S
    nachdem du das array gesplittes hast, hast Du ja praktisch das ursprüngliche byte-array. also ist File.WriteAllBytes Dein freund.

    edit... ist natürlich mist, was ich geschrieben hab. Du hast ja ein String-Array... musst eben vorher die elemente aus Deinem String-Array in ein Byte-Array schieben... verzeih, habs überlesen.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SpaceyX“ ()

    hmm komm igw nicht weiter habs jetzt mal so probiert:

    VB.NET-Quellcode

    1. ' Dim testbytes As Byte = CByte(_bytes) 'test 1
    2. Dim x() As Byte = Convert.FromBase64String(public_sb) 'test 2
    3. Dim oFileStream As System.IO.FileStream
    4. oFileStream = New System.IO.FileStream("bytes.exe", System.IO.FileMode.Create)
    5. oFileStream.Write(x, 0, x.Length) 'test 2
    6. ' oFileStream.WriteByte(testbytes) 'test 1
    7. oFileStream.Close()

    bei test2 macht er mir die exe datei aber kann sie nicht ausführen (system fehler)
    wenn ich test1 benutze kommt eine fehlermeldung "Ungültige Konvertierung
    von der Zeichenfolge 77 90 144 0 3 0 0 0 4 0 0 0 255 in Typ Byte."

    edit//

    wenn ich oben

    VB.NET-Quellcode

    1. sb.Append(" "c)

    weg lasse, kommt trotzdem ein fehler (mit der test 1 methode) "Value was either too large or too small for a Double."

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Text
    3. Public Class Form1
    4. Private _byteString As New StringBuilder()
    5. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    6. Dim b() As Byte = File.ReadAllBytes(My.Computer.FileSystem.SpecialDirectories.Desktop & "\1.exe")
    7. For Each b1 As Byte In b
    8. _byteString.Append(CStr(b1) & "/")
    9. Next
    10. _byteString.Remove(_byteString.Length - 1, 1)
    11. End Sub
    12. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    13. Dim strings() As String = _byteString.ToString().Split("/"c)
    14. Dim bytes As New List(Of Byte)
    15. For Each Str As String In strings
    16. bytes.Add(CByte(Str))
    17. Next
    18. File.WriteAllBytes(My.Computer.FileSystem.SpecialDirectories.Desktop & "\2.exe", bytes.ToArray())
    19. End Sub
    20. End Class
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o