Imports System.IO
Public Class FileUtility
Private Shared ReadOnly Rnd As New Random(Now.Millisecond)
Public Shared Sub RandomizeLines(targetFile As String, Optional randomizeRate As Integer = 10)
If randomizeRate < 2 Then randomizeRate = 10
Dim currPath As String = Path.GetDirectoryName(targetFile)
Dim currFile As String = Path.Combine(currPath, Path.GetFileNameWithoutExtension(targetFile) & " (Randomized)" & Path.GetExtension(targetFile))
Dim currWriter As String
Dim writers() As StreamWriter = {}
Array.Resize(writers, randomizeRate)
For i As Integer = 0 To randomizeRate - 1
writers(i) = New StreamWriter(Path.Combine(currPath, "temp" & i.ToString & ".txt")) 'With {.AutoFlush = True}
Next
Using fs As FileStream = File.OpenRead(targetFile)
Using sr As New StreamReader(fs)
While Not sr.EndOfStream
writers(Rnd.Next(randomizeRate)).WriteLine(sr.ReadLine())
End While
End Using
End Using
Using sw As New StreamWriter(currFile) 'With {.AutoFlush = True}
For i As Integer = 0 To randomizeRate - 1
writers(i).Dispose()
currWriter = Path.Combine(currPath, "temp" & i.ToString & ".txt")
Using reader As New StreamReader(currWriter)
While Not reader.EndOfStream
sw.WriteLine(reader.ReadLine)
End While
End Using
File.Delete(currWriter)
Next
End Using
End Sub
Public Shared Sub RandomizeLinesHaze(targetFile As String, Optional randomizeRate As Integer = 10)
If randomizeRate < 2 Then randomizeRate = 10
Dim currPath As String = Path.GetDirectoryName(targetFile)
Dim currFile As String = Path.Combine(currPath, Path.GetFileNameWithoutExtension(targetFile) & " (Randomized)" & Path.GetExtension(targetFile))
Dim currWriter As String
Dim lstWriters As New List(Of StreamWriter)
For i As Integer = 0 To randomizeRate - 1
lstWriters.Add(New StreamWriter(Path.Combine(currPath, "temp" & i.ToString & ".txt")) 'With {.AutoFlush = True})
Next
Using fs As FileStream = File.OpenRead(targetFile)
Using sr As New StreamReader(fs)
While Not sr.EndOfStream
lstWriters(Rnd.Next(randomizeRate)).WriteLine(sr.ReadLine())
End While
End Using
End Using
Using sw As New StreamWriter(currFile) 'With {.AutoFlush = True}
For i As Integer = 0 To randomizeRate - 1
lstWriters(i).Dispose()
currWriter = Path.Combine(currPath, "temp" & i.ToString & ".txt")
Using reader As New StreamReader(currWriter)
While Not reader.EndOfStream
sw.WriteLine(reader.ReadLine)
End While
End Using
File.Delete(currWriter)
Next
End Using
End Sub
End Class
Comments