Seite 1 von 1
Viele Datein binär zusammenfügen ...
Verfasst: 03.11.2007 18:21
von jerrydude
Aloha ich habe für ein Kiosk-Multimedia-System den Task viel
DivX-Files in unterschiedlicher Reihenfolge zusammen zu nähen.
Es gibt DivX-Tools die das via drag and drop können auch mit einem
simplen Filemerge Tool hat es geklappt .. allerdings nur 2 Files und
das war dann später ein Film ... und haltet Euch fest ... der Film
funktioniert sogar.
Jetzt möchte ich viele Filme zusammenfügen (auf binär-basis)
Ich habe einen Ordner in dem liegen
Film1.avi , Film2.avi usw.
Wie kann ich es jetzt scripten das PB mir alle Files schnappt und ein
großes File daraus macht. Ich bin Anfänger also bitte keine kryptischen
Erklärungen ...
Vielen Dank ... Jerry
Verfasst: 03.11.2007 20:19
von roherter
So in etwa ist ein code aus einem bestehenden projekt:
Code: Alles auswählen
;*file1
If OpenFile(0,"data/self.exe")
;CreateFile(1,"selfexe.exe")
length.l=Lof(0)
*MemoryID1 = AllocateMemory(length) ; Reservieren des benötigten Speichers
If *MemoryID1
Bytes = ReadData(0, *MemoryID1, length) ; Einlesen in den Speicherblock
EndIf
CloseFile(0)
EndIf
;*file2
If OpenFile(1,"data/self.aes")
;CreateFile(1,"selfexe.exe")
length1.l=Lof(1)
*MemoryID2 = AllocateMemory(length) ; Reservieren des benötigten Speichers
If *MemoryID2
Bytes2 = ReadData(1, *MemoryID2, length) ; Einlesen in den Speicherblock
EndIf
CloseFile(1)
EndIf
;*End Datei erstellen
If CreateFile(3,"testexe.exe")
WriteData(3,*MemoryID1,length)
WriteData(3,*MemoryID2,length1)
CloseFile(3)
EndIf
Verfasst: 03.11.2007 21:00
von NicTheQuick
Dieser Code schnappt sich alle Film1.avi bis Film?.avi und fügt sie in ein
Film_alle.avi ein. Bei mir hat es allerdings nicht geklappt, dass man sie
einfach zusammenfügt und daraus wird dann ein großes.
Code: Alles auswählen
Path.s = PathRequester("Pfad auswählen", ".\")
If Path = "" : End : EndIf ;Auf Abbrechen gedrückt
Define Max.l = 1 ;Fängt mit Film1.avi an
While FileSize(Path + "Film" + Str(Max) + ".avi") >= 0
Max + 1
Wend
Max - 1
If Max = 0 : End : EndIf ;Keine Filme gefunden
Define F_Out.l, F_In.l, a.l, *pBuffer, Size.l, Chunk.l
#buffersize = 1024 * 1024 * 2
*pBuffer = AllocateMemory(#buffersize)
If *pBuffer = 0 : End : EndIf ;AllocateMemory fehlgeschlagen
F_Out = CreateFile(#PB_Any, Path + "Film_alle.avi")
If F_Out
For a = 1 To Max
F_In = ReadFile(#PB_Any, Path + "Film" + Str(a) + ".avi")
If F_In
Size = Lof(F_In)
While Size
Debug Size
If Size > #buffersize
Chunk = #buffersize
Else
Chunk = Size
EndIf
Size - Chunk
ReadData(F_In, *pBuffer, Chunk)
WriteData(F_Out, *pBuffer, Chunk)
Wend
CloseFile(F_In)
EndIf
Next
CloseFile(F_Out)
EndIf
FreeMemory(*pBuffer)
///Edit:
FreeMemory() eingefügt. Danke, Kiffi!

Verfasst: 03.11.2007 21:04
von Kiffi
@roherter & NicTheQuick: FreeMemory() nicht vergessen!
jerrydude schreibt, dass er Anfänger ist und die Chance, dass er das von
selber einbauen wird, ist dementsprechend klein.
Grüße ... Kiffi
Verfasst: 03.11.2007 22:16
von roherter
Stimmt Kiffi,thx.
Hatte das auch in meinem Code vergessen,lol

Verfasst: 04.11.2007 14:18
von NicTheQuick
@Kiffi:
Stimmt, war ein Struddelfehler. Hab's jetzt korrigiert. Hab auch eine Ausrede:
Ich stand bei der Codeentwicklung unter Zeitdruck.
