Huhu,
Das Script soll eine Datei binär einlesen, in ein Array übergeben und anschließend in eine andere, neu erstellte Datei, die im Mode 17 geöffnet wurde, schreiben.
Das Problem liegt an der Stelle, dass ich mit FileWrite Step by Step schreibe.
Die Datei nimmt an Größe zu. Nach jedem partiellem Schreibvorgang wird durch FileWrite etwas Zusätzliches angehängt.
Füge ich die Einzelstrings des Arrays intern zusammen und schreibe die Datei in einem Rutsch, funktioniert alles problemlos. Meine Testdateien sind ca. 10MB und 50MB groß.
Spoiler anzeigen
Local $fo = FileOpen("test.wmv", 16)
Local $data = FileRead($fo)
Local $backup = $data
Local $length = StringLen($data)
Local $max = 10000000
FileClose($fo)
Local $File = "mov.wmv"
;MsgBox(0, '', $length)
If $length > $max Then
Local $FileOut = FileOpen($File, 16+1)
local $dat[Ceiling($length/$max)]
For $i = 0 To UBound($dat)-1 Step +1
$dat[$i] = StringLeft($data, $max)
$data = StringTrimLeft($data, $max)
FileWrite($FileOut, Binary($dat[$i]))
Next
Else
Local $FileOut = FileOpen($File, 16+2)
FileWrite($FileOut, Binary($data))
EndIf
FileClose($FileOut)
$data = ''
For $j = 0 To UBound($dat)-1 Step +1
$data &= $dat[$j]
Next
;$data = StringReplace($data, "a", "1")
MsgBox(0, '', StringLen($data) & ', ' & StringLen($backup) & ': ' & StringCompare($data, $backup))
Local $FileOut2 = FileOpen("test_size.wmv", 16+2)
FileWrite($FileOut2, Binary($data))
FileClose($FileOut2)
Grüße