Ist das jetzt noch das was du machen willst oder willste jetzt nur noch sowas wie WinZIP das alle Dateien in einem Ordner zu einer Datei zusammenfasst?!
Falls de wie in deinem ersten Post beschrieben zerlegen & zusammensetzen willst dann ist das was in meinem Link stand genau das was du suchst, musste natürlich anpassen ähnlich dem:
Code: Alles auswählen
Enumeration
#Window_0
EndEnumeration
Enumeration
#Editor_0
#String_0
#String_1
#String_2
#Button_0
#Button_1
#Button_2
#Button_3
EndEnumeration
Path.s = ""
DefaultPacketSize.l = 50000
SourceFile.s = ""
DestinationFile.s = ""
Procedure SplitFile(SourceFile.s, DefaultPacketSize.l)
ClearGadgetItemList(#Editor_0)
OpenFile(0, SourceFile)
Path.s = GetPathPart(SourceFile)
Size.l = Lof(0)
PacketCount.l = Size / DefaultPacketSize
PacketSize.l = Size / PacketCount
RestSize.l = Size - PacketSize * PacketCount
*mem = AllocateMemory(PacketSize)
For i = 1 To PacketCount
ReadData(0, *mem, PacketSize)
OpenFile(i,Path + GetFilePart(SourceFile) + Str(i) + ".pck")
WriteData(i,*mem, PacketSize)
CloseFile(i)
AddGadgetItem(#Editor_0, i, GetFilePart(SourceFile) + Str(i) + ".pck")
Next i
If RestSize > 0
OpenFile(PacketCount+1, Path + GetFilePart(SourceFile) + Str(PacketCount+1) + ".pck")
WriteData(PacketCount+1,*mem, RestSize)
CloseFile(PacketCount+1)
AddGadgetItem(#Editor_0, PacketCount+1, GetFilePart(SourceFile) + Str(PacketCount+1) + ".pck")
EndIf
FreeMemory(*mem)
CloseFile(0)
OpenFile(PacketCount+2, Path + GetFilePart(SourceFile) + ".pck0")
WriteString(PacketCount+2, GetFilePart(SourceFile) + ";" + Str(DefaultPacketSize) + ";" + Str(Size))
CloseFile(PacketCount+2)
AddGadgetItem(#Editor_0, 0, GetFilePart(SourceFile) + ".pck0")
EndProcedure
Procedure MergeFile(DestinationFile.s)
ClearGadgetItemList(#Editor_0)
ReadFile(0, DestinationFile)
Path.s = GetPathPart(DestinationFile)
Line.s = ReadString(0)
Name.s = StringField(Line, 1, ";")
DefaultPacketSize.l = Val(StringField(Line, 2, ";"))
Size.l = Val(StringField(Line, 3, ";"))
PacketCount.l = Size / DefaultPacketSize
PacketSize.l = Size / PacketCount
RestSize.l = Size - PacketSize * PacketCount
CloseFile(0)
OpenFile(0, Path + Name)
*mem = AllocateMemory(PacketSize)
For i = 1 To PacketCount
OpenFile(i, Path + Name + Str(i) + ".pck")
ReadData(i, *mem, PacketSize)
CloseFile(i)
WriteData(0,*mem,PacketSize)
AddGadgetItem(#Editor_0, PacketCount, "Extrahiert: " + Path + Name + Str(i) + ".pck")
Next i
If RestSize > 0
OpenFile(PacketCount+1, Path + Name + Str(PacketCount+1) + ".pck")
ReadData(PacketCount+1, *mem, PacketSize)
CloseFile(PacketCount+1)
WriteData(0,*mem,RestSize)
AddGadgetItem(#Editor_0, PacketCount+1, "Extrahiert: " + Path + Name + Str(PacketCount+1) + ".pck")
EndIf
FreeMemory(*mem)
CloseFile(0)
EndProcedure
If OpenWindow(#Window_0, 216, 0, 320, 300, "New window ( 0 )", #PB_Window_SystemMenu | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_0))
EditorGadget(#Editor_0, 10, 10, 150, 270, #PB_Editor_ReadOnly)
StringGadget(#String_0, 170, 10, 100, 20, "")
StringGadget(#String_1, 170, 40, 100, 20, "")
StringGadget(#String_2, 170, 70, 100, 20, Str(DefaultPacketSize))
ButtonGadget(#Button_0, 280, 10, 30, 20, "...")
ButtonGadget(#Button_1, 280, 40, 30, 20, "...")
ButtonGadget(#Button_2, 170, 230, 140, 20, "Split")
ButtonGadget(#Button_3, 170, 260, 140, 20, "Merge")
EndIf
Repeat
Select WindowEvent() ;{
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case #Button_0
If GetGadgetText(#String_0) = ""
Path = "C:\"
Else
Path = GetGadgetText(#String_0)
EndIf
SourceFile = OpenFileRequester("2 Split", Path, "Alle Dateien (*.*)|*.*", 0)
SetGadgetText(#String_0, SourceFile)
Case #Button_1
If GetGadgetText(#String_1) = ""
Path = "C:\"
Else
Path = GetGadgetText(#String_1)
EndIf
DestinationFile = OpenFileRequester("2 Merge", Path, "Index (*.pck0)|*.pck0", 0)
SetGadgetText(#String_1, DestinationFile)
Path = GetPathPart(DestinationFile)
Case #Button_2
If SourceFile <> ""
SplitFile(SourceFile, Val(GetGadgetText(#String_2)))
EndIf
Case #Button_3
If DestinationFile <> ""
MergeFile(DestinationFile)
EndIf
EndSelect
EndSelect
Until Quit = 1
EndIf
End