Rompi pure quanto vuoi
Venendo al dunque, il codice non differisce di molto da quello precedente, basta aggiungere un paio di istruzioni per scrivere i nomi dei file:
Sub JoinFiles(ByVal jpg As String, ByVal txt As String, ByVal out As String)
' Crea il file che sarà l'unione dei due
Using outstream As New FileStream(out, FileMode.Create)
' Ottiene le informazioni sui file jpg e txt
Dim jpg_info As New FileInfo(jpg)
Dim txt_info As New FileInfo(txt)
' Scrive la lunghezza del nome del jpg
outstream.Write(BitConverter.GetBytes(jpg_info.Name.Length), 0, 4)
' Scrive la lunghezza del file jpg
outstream.Write(BitConverter.GetBytes(jpg_info.Length), 0, 8)
' Scrive la lunghezza del nome del txt
outstream.Write(BitConverter.GetBytes(txt_info.Name.Length), 0, 4)
' Scrive la lunghezza del file txt
outstream.Write(BitConverter.GetBytes(txt_info.Length), 0, 8)
' Scrive il nome del file jpg
outstream.Write(Encoding.UTF8.GetBytes(jpg_info.Name), 0, jpg_info.Name.Length)
Dim buffer(10240) As Byte
Dim read As Integer
' Scrive tutto il file jpg
Using jpgread As New FileStream(jpg, FileMode.Open)
Do
read = jpgread.Read(buffer, 0, 10240)
outstream.Write(buffer, 0, read)
Loop While read > 0
End Using
' Scrive il nome del file txt
outstream.Write(Encoding.UTF8.GetBytes(txt_info.Name), 0, txt_info.Name.Length)
' Scrive tutto il file txt
Using txtread As New FileStream(txt, FileMode.Open)
Do
read = txtread.Read(buffer, 0, 10240)
outstream.Write(buffer, 0, read)
Loop While read > 0
End Using
End Using
End Sub
Sub SplitFiles(ByVal infile As String)
' Apre il file da dividere per la lettura
Using inreader As New FileStream(infile, FileMode.Open)
Dim jpg_len, jpg_size, txt_len, txt_size As Integer
Dim buffer(10240) As Byte
Dim read As Integer
' Legge la lunghezza del nome del jpg, la dimensione del jpg,
' la lunghezza del nome del txt e la dimensione del txt
read = inreader.Read(buffer, 0, 24)
jpg_len = BitConverter.ToInt32(buffer, 0)
jpg_size = BitConverter.ToInt64(buffer, 4)
txt_len = BitConverter.ToInt32(buffer, 12)
txt_size = BitConverter.ToUInt64(buffer, 16)
' Legge il nome del file jpg
inreader.Read(buffer, 0, jpg_len)
Dim jpg As String = Encoding.UTF8.GetString(buffer, 0, jpg_len)
' Estrae il file jpg
Using jpgwriter As New FileStream(jpg, FileMode.Create)
Dim left As Long = jpg_size
While Left > 0
read = inreader.Read(buffer, 0, Math.Min(Left, 10240))
jpgwriter.Write(buffer, 0, read)
left -= read
End While
End Using
' Legge il nome del file txt
inreader.Read(buffer, 0, txt_len)
Dim txt As String = Encoding.UTF8.GetString(buffer, 0, txt_len)
' Estrae il file txt
Using txtwriter As New FileStream(txt, FileMode.Create)
Dim left As Long = txt_size
While left > 0
read = inreader.Read(buffer, 0, 10240)
txtwriter.Write(buffer, 0, read)
left -= read
End While
End Using
End Using
End Sub
Luca