Seite 2 von 3

Verfasst: 05.01.2007 20:11
von ts-soft

Code: Alles auswählen

File = ReadFile(#PB_Any, "Test.avi")

If File
  DestF = CreateFile(#PB_Any, "Test.pak")
  If DestF
    FMem = AllocateMemory(20971520); 20 MB
    DMem = AllocateMemory(20971520 + 8)
    If FMem And DMem
      If Lof(File) >= 20971520
        Repeat
          FSize = ReadData(File, FMem, FSize)
          DSize = PackMemory(FMem, DMem, FSize)
          WriteData(DestF, DMem, DSize)
        Until FSize <  20971520 ; 20 MB
      Else
        FSize = Lof(File)
      EndIf
      FSize = ReadData(File, FMem, FSize)
      DSize = PackMemory(FMem, DMem, FSize)
      WriteData(DestF, DMem, DSize)
    EndIf
  EndIf
  CloseFile(DestF)
  CloseFile(File)
  FreeMemory(FMem)
  FreeMemory(DMem)
EndIf
Ungetested, werden 20 MB happen geschrieben.

Verfasst: 05.01.2007 20:19
von kiki

Code: Alles auswählen

  ReadData(File, Mem, FSize) 
Mem gibts nicht, soll dass FMem heißen?

Und außerdem werden bei mir bei großen Dateien (300MB)
wieder Meory Fehlermeldungen angezeigt!!!

Verfasst: 05.01.2007 20:24
von ts-soft
>> Und außerdem werden bei mir bei großen Dateien (300MB)
Warum, er liest und schreibt maximal 20 MB, belegt also ca. 40 MB RAM

Verfasst: 05.01.2007 20:41
von kiki
Danke!!!!, aber..

...Die Datei kann aber auch mal größer sein als 20 oder 40 MB, dann muss ich ja immer die Datei-Größe eingeben.

Dass tool soll ca.50% ermitteln dann einen so großen arbeitsspeicher machen, dass dann packen und dann den rest erstellen und packen.

Verfasst: 05.01.2007 20:45
von ts-soft
Du mußt garnichts angeben, die Routine funktioniert mit jeder Dateigröße,
bis 2 GB

Verfasst: 05.01.2007 20:51
von kiki
Aber ich muss die Größe des speichers größer angeben.

Verfasst: 05.01.2007 20:59
von a14xerus
kiki hat geschrieben:Danke!!!!, aber..
...Die Datei kann aber auch mal größer sein als 20 oder 40 MB, dann muss ich ja immer die Datei-Größe eingeben.
nein, les dir den code doch nocheinmal durch, er macht in einer repeat je 20 mb laden und wieder schreiben (gepackt)
kiki hat geschrieben:Dass tool soll ca.50% ermitteln dann einen so großen arbeitsspeicher machen, dass dann packen und dann den rest erstellen und packen.
und was wäre dann mit 4 gb dateien ? (bsp)

Verfasst: 05.01.2007 21:14
von ts-soft
So, hier nochmal ne getestete Version :mrgreen:

Code: Alles auswählen

File = ReadFile(#PB_Any, "test.avi")
If File
  If CreatePack("test.pak")
    FMem = AllocateMemory(20480000); 20 MB
    If FMem
      FSize = 20480000
      While Not Loc(File) = Lof(File)
        If Lof(File) - Loc(File) < 20480000
          FSize = Lof(File) - Loc(File)
        EndIf
        ReadData(File, FMem, FSize)
        AddPackMemory(FMem, FSize)
      Wend
    EndIf
    ClosePack()
  EndIf
  CloseFile(File)
  FreeMemory(FMem)
EndIf
// Edit
So kann man es auch wieder entpacken :mrgreen:

Verfasst: 05.01.2007 21:40
von kiki
Ich habs probiert, der Prozess hat ein bisschen gedauert (und ich hab mich schon gefreut) aber die Datei ist immer noch 0 Byte groß!!!!!!!! /:->

Verfasst: 05.01.2007 21:52
von ts-soft
kiki hat geschrieben:Ich habs probiert, der Prozess hat ein bisschen gedauert (und ich hab mich schon gefreut) aber die Datei ist immer noch 0 Byte groß!!!!!!!! /:->
Wenn die Datei schon irgendwie komprimiert ist, macht der Packer schon bei
12 MB zu, mußte oben einfach mal anpassen. Hab den Code im vorherigen
Posting editiert, jetzt ist es auch wieder entpackbar, obwohl das wurde ja
nicht gefordert :lol: