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
Comments
0 B
|0 👍
/0 👎
0 B
|👍
/👎