Private Shared ReadOnly Rnd As New Random(Now.Millisecond) Public Shared Sub RandomizeLines(targetFile As String, Optional randomizeRate As Integer = 10, Optional keepFile As Boolean = False) randomizeRate = Math.Max(randomizeRate, 2) 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 Dim o As Integer Dim lastIndex As Integer Using fs As FileStream = File.OpenRead(targetFile) Using sr As New StreamReader(fs) While Not sr.EndOfStream o = Rnd.Next(randomizeRate) While o = lastIndex o = Rnd.Next(randomizeRate) If o = lastIndex Then o = Math.Min(o + 1, randomizeRate - 1) End If End While lastIndex = o writers(o).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 If keepFile Then Try File.Delete(targetFile) Rename(currFile, targetFile) Catch ex As Exception End Try End If End Sub