Could someone suggest what to fix with this code?
The first version works but was consuming disk and RAM about 90% when merging.
Here's the first version:
Private Sub BackgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim counter As Double = 1
Dim inputFolder As String = txtSource.Text
Dim outputFolder As String = txtFilePath.Text + "\" + txtFileName.Text + ".ts"
Using outputStream As FileStream = New FileStream(outputFolder, FileMode.Create)
Dim files = Directory.GetFiles(inputFolder, "*.ts")
For Each inputFiles In files
Using inputFilestream As FileStream = New FileStream(inputFiles, FileMode.Open)
'progress
Dim value As Double = (counter / files.Length) * 100
BackgroundWorker1.ReportProgress(CInt(value))
'process file
inputFilestream.CopyTo(outputStream)
counter += 1
End Using
Next
End Using
End Sub
Then I tried copying the file in small pieces with the intention of using less RAM:
Private Sub CopyMyFiles()
Dim inputFolder As String = txtSource.Text
Dim outputFolder As String = txtOutputFolder.Text + "\" + txtOuputFilename.Text + ".ts"
Dim enumFiles = Directory.EnumerateFiles(inputFolder, "*.ts").ToArray
For Each files In enumFiles
Dim input As FileStream = New FileStream(files, FileMode.Open, FileAccess.ReadWrite, FileShare.Read, FileOptions.SequentialScan)
Dim output As FileStream = New FileStream(outputFolder, FileMode.Create, FileAccess.Write, FileShare.ReadWrite, FileOptions.SequentialScan)
CopyStream(input, output)
Next
End Sub
Public Shared Sub CopyStream(inputStream As Stream, outputStream As Stream)
Dim buffer = New Byte(1025) {}
Dim bytesRead As Integer
bytesRead = inputStream.Read(buffer, 0, buffer.Length)
While bytesRead > 0
outputStream.Write(buffer, 0, bytesRead)
bytesRead = inputStream.Read(buffer, 0, buffer.Length)
End While
outputStream.Flush()
inputStream.Close()
outputStream.Close()
End Sub
but that isn't working - it doesn't appear to be merging the input files.