MemoryStream in Datei schreiben

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Dendem.

    MemoryStream in Datei schreiben

    Hallo, ich habe ein Problem mit folgendem Memory Stream :

    VB.NET-Quellcode

    1. Dim count As Integer
    2. Dim byteArray As Byte()
    3. Dim charArray As Char()
    4. Dim uniEncoding As New UnicodeEncoding()
    5. ' Create the data to write to the stream.
    6. Dim firstString As Byte() = _
    7. uniEncoding.GetBytes(TextBox1.Text & "\" & ListBox1.Items(0))
    8. Dim secondString As Byte() = _
    9. uniEncoding.GetBytes(TextBox1.Text & "\" & ListBox1.Items(1))
    10. Dim memStream As New MemoryStream(100)
    11. Try
    12. ' Write the first string to the stream.
    13. memStream.Write(firstString, 0, firstString.Length)
    14. ' Write the second string to the stream, byte by byte.
    15. count = 0
    16. While (count < secondString.Length)
    17. memStream.WriteByte(secondString(count))
    18. count += 1
    19. End While
    20. ' Write the stream properties to the console.
    21. Console.WriteLine( _
    22. "Capacity = {0}, Length = {1}, Position = {2}", _
    23. memStream.Capacity.ToString(), _
    24. memStream.Length.ToString(), _
    25. memStream.Position.ToString())
    26. ' Set the stream position to the beginning of the stream.
    27. memStream.Seek(0, SeekOrigin.Begin)
    28. ' Read the first 20 bytes from the stream.
    29. byteArray = _
    30. New Byte(CType(memStream.Length, Integer)) {}
    31. count = memStream.Read(byteArray, 0, 20)
    32. ' Read the remaining Bytes, Byte by Byte.
    33. While (count < memStream.Length)
    34. byteArray(count) = _
    35. Convert.ToByte(memStream.ReadByte())
    36. count += 1
    37. End While
    38. ' Decode the Byte array into a Char array
    39. ' and write it to the console.
    40. charArray = _
    41. New Char(uniEncoding.GetCharCount( _
    42. byteArray, 0, count)) {}
    43. uniEncoding.GetDecoder().GetChars( _
    44. byteArray, 0, count, charArray, 0)
    45. Console.WriteLine(charArray)
    46. Finally
    47. memStream.Close()
    48. End Try



    Hab auch schon Google, openbook, msdn etc. durchgesucht, einige anhaltspunkte gefunden, aber nie was konkretes wo es dann gezeigt wird wie es geht
    ich will diesen memory Stream in eine Datei schrieben in diesen Memory Stream werden 2 Dateien geladen, diese werden zusammen gefügt, aber ich weiß nicht wie ich die jetzt schreiben soll.

    Ich weiß auch das der Memory Stream nur vor dem memstream.close() lesbar und schreibbar ist :D

    Bitte helft mir

    Dendem schrieb:

    Hab auch schon Google, openbook, msdn etc. durchgesucht

    Dann hast Du auf jeden Fall schlecht gesucht, denn wenn Du Dir die Methoden/Properties des MemoryStream in MSDN anzeigen lässt, so stösst man eigentlich sofort auf die WriteTo Methode, die den gesamten Inhalt des MemoryStreams in einen anderen Stream wegschreibt.

    Also öffne Dir einen Filestream und schreib den Inhalt dort mit der WriteTo Methode rein.
    Oh, sry muss ich iwie übersehen haben, ich versuch mal des in den File Stream zu schreiben.

    Also ich hab jz

    VB.NET-Quellcode

    1. Console.WriteLine(charArray)
    2. Finally
    3. Dim path As String = TextBox2.Text & "\" & TextBox3.Text & "." & TextBox4.Text
    4. Dim fs As FileStream = File.Create(path)
    5. memStream.WriteTo(fs)
    6. memStream.Close()
    7. fs.Close()
    8. End Try


    und in diesen Filestream schreib ich den memstream aber die dabei entstandene Datei ist nur 375 Bytes Groß und ist auch nicht zu verwenden (die Lieder haben ja schon einige MB)

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

    VB.NET-Quellcode

    1. memStream.Write(firstString, 0, firstString.Length)


    damit werden die doch in dem stream geschreiben oder?

    egal, ich habs auch noch mit binary writer gemacht und es entsteht eine Datei, diese hat aber 0 Bytes, zmd. steht des so da und wenn man die verschieben oder löschen will steht da, dass die DAtei verwendet wird, kann es s ein das das Programm paar mins zum schreiben braucht?
    EDIT: hab gewartet bis man sie verschieben konnte aber immernoch 0 Bytes iwie check ich des net, ich hab schon total viele Memory stream aus dem ganzen inet versucht, keiner funzt so wie ich des will -.-
    mit Stream.Close() die Verbindung gekappt und .Dispose() die StreamVariable gekillt ? Einige Minuten zum Schreiben ? Wir sind im 21. Jahrhundert xD

    Dendem schrieb:

    in diesen Memory Stream werden 2 Dateien geladen, diese werden zusammen gefügt

    Ich weiss nicht wo Du diesen Code herkopiert hast und schon garnicht was dieser eigentlich bewirken soll. Aber Du schreibst hier nur 2 Pfade in den memorystream, nicht die die Dateien selber, was Du auch an den Ausgabeinformationen selber hättest sehen müssen.

    Ausserdem kann man 2 mp3 Files auf diese Weise nicht so einfach zusammenfügen: mp3 Files haben einen Header und oft noch ID- Tags entweder am Anfang oder am Ende der Datei stehen, die beim Mergen in irgendeiner Weise berücksichtigt werden müssen.

    Für die einfache Übung einen Teststring erst in einen Memorystream und dann in ein File wegzuschreiben klappt folgender Code prima:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. ' buffer anlegen
    4. Dim buffer As Byte() = System.Text.Encoding.UTF8.GetBytes("Teststring mit Umlauten Ä,Ö,Ü")
    5. ' in Memorystream schreiben
    6. Dim ms As New System.IO.MemoryStream
    7. ms.Write(buffer, 0, buffer.Length)
    8. ' in datei wegschreiben
    9. Dim fs As New System.IO.FileStream("d:\test.txt", System.IO.FileMode.Create)
    10. ms.WriteTo(fs)
    11. ' streams schliessen
    12. fs.Close()
    13. ms.Close()
    14. End Sub
    15. End Class

    Dendem schrieb:

    Kangaroo ist es bei Filmdateien auch so wie bei mp3s mim header und den Id Tags

    Da musst Du schon einmal den Container und den betreffenden Codec nennen.

    Grundsätzlich kannst Du davon ausgehen dass es eher schlimmer ist, da bei Filmdateien ja ein Containerformat Text, Audio- und Video-Stream miteinander verwebt.
    ahh ok, ich glaube das ist dann noch ein paar stufen zu hoch ich lass des mal lieber mit dem zusammenschneiden von Filmen erstmal und benutz ne software
    trotzdem danke an alle :D
    würde es mit WriteAllBytes eig auch gehen?

    also

    VB.NET-Quellcode

    1. write all bytes(..., ReadAllBytes(...), false)
    2. write all bytes(..., ReadAllBytes(...), false)

    in nem anderen thread wurde mir gesagt. dass es so gehen soll, ging aber net und dann hat sich da auch keiner mehr drum gekümmert