"Vieleicht" kann heutzutage noch jemand ein solches Programm gebrauchen, der auf einem PC keine Software hat, um Dateien im kleinere Pakete zu trennen und auf einem anderem PC wieder zusammenzufügen. Ich habe hier schnell dieses kleine Progrämmchen geschrieben weil ich unbedingt eine größere Datei auf meinen PC bringen musste. Und am Quell-PC war der USB-Port defekt und hat keinen Brenner... tja, mussten 3,5er Floppys her. Nicht mal eine Software zum Splitten von Dateien war drauf.
Vorsicht: Programm guckt nicht ob falsche Eingaben irgendwo gemacht wurden, da ich es nur für den schnellen Zweck brauchte, aber bei richtigem Umgang funzt es einwandfrei
Code: Alles auswählen
stringSize.l = 32000
Enumeration
#Frame3D_0
#Text_0
#String_Split_Source
#Button_Split_BrowseSource
#Text_1
#String_Split_Destination
#Button_Split_BrowseDestination
#Text_2
#String_Packsize
#Text_SizeInfo
#Button_Split
#ProgressBar_Info
#Text_Info
#Frame3D_1
#Text_7
#String_Merge_File
#Button_Merge_Browse
#CheckBox_KillPacks
#Button_Merge
EndEnumeration
OpenWindow(0, 298, 165, 375, 295, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered , "KTX's FileSplitter")
CreateGadgetList(WindowID())
Frame3DGadget(#Frame3D_0, 10, 10, 355, 125, "Splitter")
TextGadget(#Text_0, 20, 30, 45, 15, "Datei:")
StringGadget(#String_Split_Source, 105, 25, 220, 20, "", #PB_String_ReadOnly)
ButtonGadget(#Button_Split_BrowseSource, 330, 25, 25, 20, "...")
TextGadget(#Text_1, 20, 55, 85, 15, "Zielverzeichnis:")
StringGadget(#String_Split_Destination, 105, 50, 220, 20, "", #PB_String_ReadOnly)
ButtonGadget(#Button_Split_BrowseDestination, 330, 50, 25, 20, "...")
TextGadget(#Text_2, 20, 80, 70, 15, "Paket-Größe:")
StringGadget(#String_Packsize, 105, 75, 70, 20, "", #PB_String_Numeric)
TextGadget(#Text_SizeInfo, 180, 80, 175, 15, "")
ButtonGadget(#Button_Split, 20, 100, 335, 25, "Split!")
ProgressBarGadget(#ProgressBar_Info, 165, 265, 200, 20, 0, 100, #PB_ProgressBar_Smooth)
TextGadget(#Text_Info, 10, 270, 150, 15, "KTX's FileSplitter v0.8")
Frame3DGadget(#Frame3D_1, 10, 145, 355, 105, "Merger")
TextGadget(#Text_7, 20, 165, 60, 15, "Packdatei:")
StringGadget(#String_Merge_File, 105, 160, 220, 20, "", #PB_String_ReadOnly)
ButtonGadget(#Button_Merge_Browse, 330, 160, 25, 20, "...")
CheckBoxGadget(#CheckBox_KillPacks, 20, 190, 335, 15, "Pakete nach erfolgreichem Verschmelzen löschen")
ButtonGadget(#Button_Merge, 20, 215, 335, 25, "Merge!")
SetGadgetText(#String_Packsize, "1440000")
size_kB.f = Val(GetGadgetText(#String_Packsize)) / 1024
size_MB.f = size_kB / 1024
SetGadgetText(#Text_SizeInfo, "Bytes = " + StrF(size_kB, 1) + "kB = " + StrF(size_MB, 2) + "MB")
split_source$ = ""
split_destination$ = ""
Repeat
eID = WaitWindowEvent()
If eID = #PB_EventGadget
gID = EventGadgetID()
If gID = #String_Packsize
size_kB.f = Val(GetGadgetText(#String_Packsize)) / 1024
size_MB.f = size_kB / 1024
SetGadgetText(#Text_SizeInfo, "Bytes = " + StrF(size_kB, 1) + "kB = " + StrF(size_MB, 2) + "MB")
EndIf
If gID = #Button_Split_BrowseSource
split_source$ = OpenFileRequester("Datei auswälen...", split_source$, "*.*", 0)
SetGadgetText(#String_Split_Source, split_source$)
EndIf
If gID = #Button_Split_BrowseDestination
split_destination$ = PathRequester("Zielverzeichnis wählen...", split_destination$)
SetGadgetText(#String_Split_Destination, split_destination$)
EndIf
If gID = #Button_Split
Gosub SplitFile
EndIf
If gID = #Button_Merge_Browse
merge_source$ = OpenFileRequester("Datei auswälen...", merge_source$, "KTX Packfile | *.pck", 0)
SetGadgetText(#String_Merge_File, merge_source$)
EndIf
If gID = #Button_Merge
Gosub MergeFile
EndIf
EndIf
Until eID = #PB_EventCloseWindow
End
SplitFile:
packSize.l = Val(GetGadgetText(#String_Packsize))
If split_source$ = "" : Return : EndIf
OpenFile(0, split_source$)
fileSize.l = Lof()
originalFileSize.l = fileSize
numberPacks.l = Int(fileSize / packSize) + 1
SetGadgetText(#Text_Info, "Schreibe Hauptpaket")
While WindowEvent() <> 0 : Wend
sourcefile$ = GetFilePart(split_source$)
OpenFile(1, split_destination$ + "Pack.pck")
WriteLong(packSize)
WriteLong(fileSize)
WriteWord(Len(sourcefile$))
WriteString(sourcefile$)
CloseFile(1)
For i = 1 To numberPacks
SetGadgetText(#Text_Info, "Schreibe Paket " + Str(i) + "/" + Str(numberPacks))
While WindowEvent() <> 0 : Wend
OpenFile(1, split_destination$ + "Pack.pk" + Str(i))
restSize = packSize
Repeat
percent.l = 100 - ((fileSize * 100) / originalFileSize)
SetGadgetState(#ProgressBar_Info, percent)
While WindowEvent() <> 0 : Wend
If restSize >= stringSize And fileSize >= stringSize
UseFile(0)
string.s = Space(stringSize)
ReadData(@string, stringSize)
UseFile(1)
WriteData(@string, stringSize)
restSize - stringSize
fileSize - stringSize
ElseIf restSize >= stringSize And fileSize < stringSize
UseFile(0)
string.s = Space(fileSize)
ReadData(@string, fileSize)
UseFile(1)
WriteData(@string, fileSize)
restSize - fileSize
fileSize = 0
ElseIf restSize < stringSize And fileSize >= stringSize
UseFile(0)
string.s = Space(restSize)
ReadData(@string, restSize)
UseFile(1)
WriteData(@string, restSize)
fileSize - restSize
restSize = 0
EndIf
Until fileSize = 0 Or restSize = 0
CloseFile(1)
Next
CloseFile(0)
SetGadgetState(#ProgressBar_Info, 0)
SetGadgetText(#Text_Info, "Fertig")
While WindowEvent() <> 0 : Wend
Return
MergeFile:
If merge_source$ = "" : Return : EndIf
sourcepath$ = GetPathPart(merge_source$)
OpenFile(1, merge_source$)
packSize = ReadLong()
fileSize = ReadLong()
l = ReadWord() & $FFFF
FileName$ = Space(l)
ReadData(@FileName$, l)
CloseFile(1)
numberPacks.l = Int(fileSize / packSize) + 1
OpenFile(0, sourcepath$ + FileName$)
For i = 1 To numberPacks
SetGadgetText(#Text_Info, "Verschmelze Paket " + Str(i) + "/" + Str(numberPacks))
While WindowEvent() <> 0 : Wend
ReadFile(1, sourcepath$ + "Pack.pk" + Str(i))
restSize = Lof()
Repeat
If restSize >= stringSize
UseFile(1)
string.s = Space(stringSize)
ReadData(@string, stringSize)
UseFile(0)
WriteData(@string, stringSize)
restSize - stringSize
ElseIf restSize < stringSize
UseFile(1)
string.s = Space(restSize)
ReadData(@string, restSize)
UseFile(0)
WriteData(@string, restSize)
restSize = 0
EndIf
Until restSize = 0
CloseFile(1)
Next
CloseFile(0)
SetGadgetText(#Text_Info, "Fertig")
While WindowEvent() <> 0 : Wend
Return