Code: Alles auswählen
; ------------------------------------------------------------------------------------
; Include: Filesplitter
; Autor: Alexander Aigner
; ------------------------------------------------------------------------------------
EnableExplicit
; ------------------------------------------------------------------------------------
; Internal
; ------------------------------------------------------------------------------------
Macro Mem_Alloc(_mem)
AllocateMemory(_mem)
EndMacro
Macro Mem_ReAlloc(_mem, _size)
ReAllocateMemory(_mem, _size)
EndMacro
Macro Mem_Free(_mem)
FreeMemory(_mem)
EndMacro
Macro FileExists(_File)
(FileSize(_File)>-1)
EndMacro
Macro CheckDir(_Dir)
If Mid(_Dir, Len(_Dir), 1)<>"\"
_Dir + "\"
EndIf
EndMacro
Macro CheckExtension(_Ext)
If Left(_Ext, 1) = "."
_Ext = Mid(_Ext, 2)
EndIf
EndMacro
; ------------------------------------------------------------------------------------
; Procedures
; ------------------------------------------------------------------------------------
Declare SplittFile(InFile.s, OutDir.s, PartName.s, PartExtension.s, PartSize.q)
Declare MergeFile(InDir.s, PartName.s, PartExtension.s, OutFile.s, DeleteParts = 0)
Procedure SplittFile(InFile.s, OutDir.s, PartName.s, PartExtension.s, PartSize.q)
Protected File, tFile, Size, Count, i, *mem
CheckDir(OutDir)
CheckExtension(PartExtension)
CreateDirectory(OutDir)
File = ReadFile(#PB_Any, InFile)
If File
Size = Lof(File)
Count = Round(Size/PartSize, 0)
For i = 0 To count
FileSeek(File, i*PartSize)
*mem = Mem_Alloc(PartSize)
ReadData(File, *mem, PartSize)
tFile = CreateFile(#PB_Any, OutDir + PartName + Str(i) + "." + PartExtension)
If tFile
If (i + 1)*PartSize>Size
WriteData(tFile, *mem, PartSize-((i + 1)*PartSize-Size))
Else
WriteData(tFile, *mem, PartSize)
EndIf
CloseFile(tFile)
EndIf
Mem_Free(*mem)
Next
CloseFile(File)
ProcedureReturn i
EndIf
EndProcedure
Procedure MergeFile(InDir.s, PartName.s, PartExtension.s, OutFile.s, DeleteParts = 0)
Protected File, tFile, Size, *mem, i
CheckDir(InDir)
CheckExtension(PartExtension)
File = CreateFile(#PB_Any, OutFile)
If File
Repeat
If FileExists(InDir + PartName + Str(i) + "." + PartExtension)
tFile = ReadFile(#PB_Any, InDir + PartName + Str(i) + "." + PartExtension)
If tFile
Size = Lof(tFile)
*mem = Mem_Alloc(Size)
ReadData(tFile, *mem, Size)
CloseFile(tFile)
If DeleteParts
DeleteFile(InDir + PartName + Str(i) + "." + PartExtension)
EndIf
i + 1
Else
Break
EndIf
FileSeek(File, Lof(File))
WriteData(File, *mem, Size)
Mem_Free(*mem)
Else
Break
EndIf
ForEver
CloseFile(File)
EndIf
EndProcedure
DisableExplicit