Guten Morgen,
ich würde gern mein Programm scheller arbeiten lassen und habe diesbezüglich ein paar Fragen an Euch.
1.gibt es noch andere Methoden ausser den beiden hier ?
2.wie kann ich den Ablauf beschleunigen ?
3.wer hilft mir für einen virtuellen Kaffe sowie ein Danke schön weiter
Hier meine bisherigen Versuche:
Spoiler anzeigen
;####################################################################
; Beschreibung was gemacht werden soll
;####################################################################
; aus einer großen datei sollen viele kleine dateien extraiert werden
; die start/end position jeder datei ist in einem array gespeichert
; in einer schleife werden die dateien nach und nach extraiert.
;
; $ByteStart = anfangsstelle in byte d an der extraiert werden soll
; $ByteLenght = länge in byte die extraiert werden soll
; z.B.
; $ByteStart = 1450424
; $ByteLenght = 69473
; oder
; $ByteStart = 6594465
; $ByteLenght = 77768
;####################################################################
; die bisher schnellste version beim extraieren der dateien
; stürzt aber bei dateien die ein paar 100mb groß sind mit einem
; memory fehler ab (Error allocating memory)
; darum einen anderen Weg gesucht und gefunden, leider ist der langsamer
;####################################################################
; lese zu extraierende datei ein
; diese funktion bringt bei dateien um 500mb einen speicherfehler = crash
$hFile = FileOpen($PACKFile, 16)
$bData = FileRead($hFile)
FileClose($hFile)
For $r = 0 to UBound($split,1) - 1
;eine datei wird aus dem buffer der hauptdatei "kopiert"
$LogData = BinaryMid($bData, $ByteStart, $ByteLenght)
;die "kopierte" datei wird neu gespeichert
$hFile = FileOpen($Foldername & "\" & $Filename& ".log", 18)
FileWrite($hFile,$LogData)
FileClose($hFile)
ENDIF
Next
;####################################################################
; diese funktioniert auch mit dateien die ein paar 100mb groß sind,
; ist aber leider extrem langsamer als die erste.
;####################################################################
For $r = 0 to UBound($split,1) - 1
;lese die bytes der zu extraierenden datei ein
$tBuffer = DllStructCreate("byte[" & $ByteLenght & "]")
$hFile = _WinAPI_CreateFile($PACKFile, 2, 2)
_WinAPI_SetFilePointer($hFile, $ByteStart)
_WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer),$ByteLenght, $nBytes)
_WinAPI_CloseHandle($hFile)
;speichere die extraierten bytes als neue datei
$hFile = _WinAPI_CreateFile($NewFolderName & "\" & $Filename& ".log", 1, 4)
_WinAPI_SetFilePointer($hFile, 0,0)
_WinAPI_WriteFile($hFile, DllStructGetPtr($tBuffer),$ByteLenght, $nBytes)
_WinAPI_CloseHandle($hFile)
$tBuffer = 0
Next
;####################################################################