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

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
