Vb.net StreamWriter中不必要的重复

Vb.net StreamWriter中不必要的重复,vb.net,Vb.net,我有这个密码 Dim sw As StreamWriter For x As Integer = 0 To 20 Dim validchars As String = "cfeabd0123456789" Dim sb As New StringBuilder() Dim rand As New Random() For i As Integer = 1 To 32 Dim idx As Int

我有这个密码

  Dim sw As StreamWriter
    For x As Integer = 0 To 20
        Dim validchars As String = "cfeabd0123456789"

        Dim sb As New StringBuilder()
        Dim rand As New Random()
        For i As Integer = 1 To 32
            Dim idx As Integer = rand.Next(0, validchars.Length)
            Dim randomChar As Char = validchars(idx)
            sb.Append(randomChar)
        Next i

        Dim randomString = sb.ToString()
        sw = File.AppendText("C:\file.txt")
        sw.WriteLine(randomString)
        sw.Close()
    Next
它所做的是创建20个随机句子,并在第3行声明“Validchars”,然后将输出写入带有附加功能的文本文件。我想每行写一个输出,例如:

4926022cabea67acc9c95035ff6ec492
7ca00313c590f990fa797c73ec1d3305
303a7364c220f3d02c5df8b5b39e00ae
但我遇到的问题是,它多次重复这些行,下面是一个示例输出(我删除了一些行以使其更短):


正如您所看到的,它不是每行放置一个输出,而是重复多次输出,然后对下一个输出执行相同的操作。。。请帮助从循环中删除随机项

Sub GenerateRandomFileContent()
    Dim rand As New Random()
    Dim sw As StreamWriter
    For x As Integer = 0 To 20
        Dim validchars As String = "cfeabd0123456789"

        Dim sb As New StringBuilder()

        For i As Integer = 1 To 32
            Dim idx As Integer = rand.Next(0, validchars.Length)
            Dim randomChar As Char = validchars(idx)
            sb.Append(randomChar)
        Next i

        sb.Append(Environment.NewLine)  ' Remove this line if not needed

        ' Appends the Text to file
        Dim randomString = sb.ToString()
        sw = File.AppendText("C:\file.txt")
        sw.WriteLine(randomString)
        sw.Close()

        ' To Append this Text you could use just these lines below
        'Dim randomString = sb.ToString()
        'File.AppendAllText("C:\file.txt", randomString)
    Next
End Sub

New Random
在没有其他参数或设置的情况下,总是从同一位置重新启动。不完全是这样,New Random()将使用依赖于时间的默认种子值初始化Random类的新实例。循环非常快,然后一些线得到相同的毫秒,和相同的sandom种子。正如您得到的答案中所解释的,重复与
StreamWriter
没有任何关系。无论如何,你应该“更恰当地”使用它。将其初始化为
sw as StreamWriter=New StreamWriter(“C:\file.txt”,True)
就足以追加文件(您不需要任何东西都使用
sw=file.AppendText(“C:\file.txt”)
位)。另外,您可能有兴趣使用语句将其放入
中(这将避免最后一个
sw.Close()
,并将正确地处理它)。@Tony回答得好。但是OP使用的是
StreamWriter
,并认为这就是他得到不想要的行为的原因;在你的解决方案中,你已经取代了它;可能会被误解为“最好不要使用StreamWriter”(事实并非如此)。谢谢你,我不理解你所说的,并将StreamWriter放回原处。我还允许使用使用File.AppendAllText的其他代码进行注释
Sub GenerateRandomFileContent()
    Dim rand As New Random()
    Dim sw As StreamWriter
    For x As Integer = 0 To 20
        Dim validchars As String = "cfeabd0123456789"

        Dim sb As New StringBuilder()

        For i As Integer = 1 To 32
            Dim idx As Integer = rand.Next(0, validchars.Length)
            Dim randomChar As Char = validchars(idx)
            sb.Append(randomChar)
        Next i

        sb.Append(Environment.NewLine)  ' Remove this line if not needed

        ' Appends the Text to file
        Dim randomString = sb.ToString()
        sw = File.AppendText("C:\file.txt")
        sw.WriteLine(randomString)
        sw.Close()

        ' To Append this Text you could use just these lines below
        'Dim randomString = sb.ToString()
        'File.AppendAllText("C:\file.txt", randomString)
    Next
End Sub