Hallo miteinander
Ich habe ein kleines Problem, bei dem ich vermute, dass das so nicht geht, wie ich mir das vorgestellt habe. Die Frage ist: Kann ich eine Datei, die ich per DeflateStream komprimiert habe, zerlegen und die Einzelteile erst dekomprimieren und dann wieder zusammenfügen?
Ich gehe leider davon aus, dass so eine DeflateStream-Datei einen Header hat, und nicht so ohne weiteres in Einzelteilen dekomprimiert werden kann.
Jedenfalls bekomme ich in Zeile 38 den Fehler: System.IO.InvalidDataException: "Ungültige Daten beim Decodieren gefunden.", jedenfalls wenn in Zeile 9
Oder es liegt an was Anderem, sieht jemand einen offensichtlichen Fehler?
Hier mein Code:
Ich habe ein kleines Problem, bei dem ich vermute, dass das so nicht geht, wie ich mir das vorgestellt habe. Die Frage ist: Kann ich eine Datei, die ich per DeflateStream komprimiert habe, zerlegen und die Einzelteile erst dekomprimieren und dann wieder zusammenfügen?
Ich gehe leider davon aus, dass so eine DeflateStream-Datei einen Header hat, und nicht so ohne weiteres in Einzelteilen dekomprimiert werden kann.
Jedenfalls bekomme ich in Zeile 38 den Fehler: System.IO.InvalidDataException: "Ungültige Daten beim Decodieren gefunden.", jedenfalls wenn in Zeile 9
i = 2
ist, bei i = 1
oder i = 0
kommt noch kein Fehler.Oder es liegt an was Anderem, sieht jemand einen offensichtlichen Fehler?
Hier mein Code:
VB.NET-Quellcode
- Sub Main()
- Dim KomprimierteDaten As Byte() = Komprimieren(System.IO.File.ReadAllBytes("C:\OriginalDatei.dat"))
- Using ZusammenGesetzteDaten As New MemoryStream
- Dim ZerlegteDaten As List(Of Byte()) = ByteArrayZuChunksZerlegen(KomprimierteDaten, 500000)
- For i = 0 To ZerlegteDaten.Count - 1
- ZusammenGesetzteDaten.WriteAsync(DeKomprimieren(ZerlegteDaten(i)), i * 500000, 500000)
- Next
- Using fStream As New FileStream("C:\DekomprimierteDatei.dat", FileMode.Create)
- ZusammenGesetzteDaten.CopyTo(fStream)
- End Using
- End Using
- Console.WriteLine("Done!")
- Console.ReadLine()
- End Sub
- Private Function ByteArrayZuChunksZerlegen(ByVal byteData As Byte(), ByVal BufferSize As Long) As List(Of Byte())
- Dim chunks As List(Of Byte()) = byteData.[Select](Function(value, index) New With {Key .PairNum = Math.Floor(index / CDbl(BufferSize)), value
- }).GroupBy(Function(pair) pair.PairNum).[Select](Function(grp) grp.[Select](Function(g) g.value).ToArray()).ToList
- Return chunks
- End Function
- Function DeKomprimieren(ByVal ZuKomprimieren As Byte()) As Byte()
- ' Byte Array in MemoryStream verwandeln
- Using inputStream As MemoryStream = New MemoryStream(ZuKomprimieren)
- ' Dekomprimierten Stream erzeugen
- Using outputStream As MemoryStream = New MemoryStream()
- Using decompressionStream As DeflateStream =
- New DeflateStream(inputStream, CompressionMode.Decompress)
- ' Dekomprimierten Stream in MemoryStream verwandeln
- decompressionStream.CopyTo(outputStream)
- End Using
- Return outputStream.ToArray
- End Using
- End Using
- End Function
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „kafffee“ ()