VB Code:
Public Sub JoinFiles(TargetFile As String, ParamArray Files() As Variant)
Dim iFFTarget As Integer, iFFSource As Integer, lFiles As Long, sRead As String
Dim sFileSizes As String, sFileData As String, sHeader As String
iFFTarget = FreeFile
' Clean/create the file:
Open TargetFile For Output As iFFTarget
Close iFFTarget
iFFTarget = FreeFile
Open TargetFile For Binary As iFFTarget
For lFiles = LBound(Files) To UBound(Files)
iFFSource = FreeFile
Open Files(lFiles) For Binary As iFFSource
sRead = String(LOF(iFFSource), " ")
sFileSizes = sFileSizes & LOF(iFFSource) & "|" & Files(lFiles) & "|"
Get #iFFSource, , sRead
Close iFFSource
sFileData = sFileData & sRead
Next
sHeader = Len(sFileSizes)
Put #iFFTarget, , sHeader & "</HEAD>"
Put #iFFTarget, , sFileSizes
Put #iFFTarget, , sFileData
Close iFFTarget
End Sub
Public Sub SplitFiles(FusedFile As String)
Dim iFFFused As Integer, iFFSplit As Integer, sRead As String, lFiles As Long, lHeadSize As Long
Dim sFileSizes As String, sFiles() As String, sWrite As String, sSeek As String
iFFFused = FreeFile
Open FusedFile For Binary As iFFFused
sRead = String(LOF(iFFFused), " ")
Get #iFFFused, , sRead
lHeadSize = Split(sRead, "</HEAD>")(0)
sSeek = Trim(Str(lHeadSize)) & "</HEAD>"
sFileSizes = String(lHeadSize, " ")
Seek #iFFFused, 1
Get #iFFFused, , sSeek
Get #iFFFused, , sFileSizes
sFiles = Split(Left(sFileSizes, Len(sFileSizes) - 1), "|")
For lFiles = LBound(sFiles) To UBound(sFiles) Step 2
iFFSplit = FreeFile
sWrite = String(sFiles(lFiles), " ")
Get #iFFFused, , sWrite
Open sFiles(lFiles + 1) For Binary As iFFSplit
Put #iFFSplit, , sWrite
Close iFFSplit
Next
Close iFFFused
End Sub
Public Function RoundUp(Number As Double) As Long
Dim lNumber As Long
lNumber = Number
If lNumber <> Number Then
RoundUp = lNumber + 1
Else
RoundUp = lNumber
End If
End Function