Seite 1 von 1

KTX FileSplitter

Verfasst: 14.06.2005 02:21
von KTX82
Gute Nacht!

"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 :wink:

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