Public Class RC4FileCutter
Private _thread As Thread
Private _Crypter As RC4Crypter
Private _fileIn As FileStream
Private _fileInPath As String
Private _fileOut As FileStream
Private _fileOutPath As String
Private _partsize As PartSize
Private _joinFiles As List(Of String)
Private _process As Byte
Public Event FileSplitted(ByVal files As List(Of String), ByVal num As Long)
Public Event FileJoined(ByVal filename As String)
Enum PartSize
KB16 = 16 * 1024
KB32 = 32 * 1024
KB64 = 64 * 1024
KB128 = 128 * 1024
KB256 = 256 * 1024
KB512 = 512 * 1024
KB1024 = 1024 * 1024
KB2048 = 2048 * 1024
KB4096 = 4096 * 1024
End Enum
Public Sub New(ByVal key As String)
_Crypter = New RC4Crypter(key)
End Sub
Public Sub Split(ByVal filename As String, ByVal size As PartSize, ByVal _
fileout As String)
Try
_fileIn = New FileStream(filename, FileMode.Open)
_fileOutPath = fileout
_fileInPath = filename
_partsize = size
_process = 0
_thread = New Thread(AddressOf SplitJob)
_thread.Start()
Catch e As Exception
'Throw...
End Try
End Sub
Private Sub SplitJob()
Dim buffer() As Byte
Dim files As New List(Of String)
Dim i As Long
Try
If _fileIn.Length <= _partsize Then
' Nur einen Part erstellen
files.Add(_fileOutPath)
_fileOut = New FileStream(_fileOutPath, FileMode.Create)
ReDim buffer(_fileIn.Length)
_fileIn.Read(buffer, 0, buffer.Length)
_Crypter.Crypt(buffer)
_fileOut.Write(buffer, 0, buffer.Length)
_fileOut.Flush()
_fileOut.Close()
RaiseEvent FileSplitted(files, 1)
Else
' Mehr als ein Part
For i = 0 To (_fileIn.Length \ _partsize)
' Stream erstellen
_fileOut = New FileStream(getNumeratedFileName( _
_fileOutPath, i), FileMode.Create)
' Datei mit auf die Liste
files.Add(getNumeratedFileName(_fileOutPath, i))
ReDim buffer(_partsize)
_fileIn.Read(buffer, 0, buffer.Length)
_Crypter.Crypt(buffer)
_fileOut.Write(buffer, 0, buffer.Length)
' Fortschritt
_process = Math.Round((((i + 1) * _partsize) / _
_fileIn.Length) * 100, 0)
Next
' Überlauf
If (_fileIn.Length Mod _partsize) > 0 Then
' Letzter Part
files.Add(getNumeratedFileName(_fileOutPath, i + 1))
_fileOut = New FileStream(getNumeratedFileName( _
_fileOutPath, i + 1), FileMode.Create)
ReDim buffer(_fileIn.Length Mod _partsize)
_fileIn.Read(buffer, 0, buffer.Length)
_Crypter.Crypt(buffer)
_fileOut.Write(buffer, 0, buffer.Length)
End If
_fileOut.Flush()
_fileOut.Close()
_fileIn.Close()
_process = 100
RaiseEvent FileSplitted(files, files.Count)
End If
Catch e As ThreadAbortException
End Try
End Sub
Public Sub Join(ByVal filenames As List(Of String), ByVal fileout As String)
_joinFiles = filenames
_fileOutPath = fileout
_thread = New Thread(AddressOf JoinJob)
_thread.Start()
End Sub
Public Sub JoinJob()
Try
Dim buffer() As Byte
_fileOut = New FileStream(_fileOutPath, FileMode.Create)
For Each a As String In _joinFiles
_fileIn = New FileStream(a, FileMode.Open)
ReDim buffer(_fileIn.Length)
_fileIn.Read(buffer, 0, buffer.Length)
_Crypter.Crypt(buffer)
_fileOut.Write(buffer, 0, buffer.Length)
_fileIn.Close()
' Fortschritt
_process = Math.Round(((_joinFiles.IndexOf(a) / _
_joinFiles.Count) * 100), 0)
Next
_fileOut.Flush()
_fileOut.Close()
RaiseEvent FileJoined(_fileOutPath)
Catch e As ThreadAbortException
End Try
End Sub
...
End Class So. Hier ist jetzt der Rest des Codes (leicht gekürzt). Was meinst du mit dieser Unicode-Byte Umwandlung? Wird Unicode nicht auch einfach mit 2
Bytes pro Zeichen statt einer gespeichert? (Die Datei die ich zum Umwandeln benutzt habe, war übrigens ein JPEG. |