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! :allright:

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 :o

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. :mrgreen: