【发布时间】:2013-10-27 01:09:19
【问题描述】:
我有这个代码
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
但我得到的问题是它重复了很多次,这是一个示例输出(我删除了一些行以使其更短):
4926022cabea67acc9c95035ff6ec492
4926022cabea67acc9c95035ff6ec492
4926022cabea67acc9c95035ff6ec492
4926022cabea67acc9c95035ff6ec492
4926022cabea67acc9c95035ff6ec492
4926022cabea67acc9c95035ff6ec492
4926022cabea67acc9c95035ff6ec492
4926022cabea67acc9c95035ff6ec492
c45a315faa856e1c681e7ddd5d2c1276
c45a315faa856e1c681e7ddd5d2c1276
c45a315faa856e1c681e7ddd5d2c1276
c45a315faa856e1c681e7ddd5d2c1276
c45a315faa856e1c681e7ddd5d2c1276
c45a315faa856e1c681e7ddd5d2c1276
c45a315faa856e1c681e7ddd5d2c1276
c45a315faa856e1c681e7ddd5d2c1276
c45a315faa856e1c681e7ddd5d2c1276
c45a315faa856e1c681e7ddd5d2c1276
如您所见,它不是每行输出一个输出,而是重复输出多次,然后对下一个输出执行相同操作...请帮助
【问题讨论】:
-
New Random没有其他参数或设置总是从同一个地方重新启动。 -
不完全是,new Random() 将使用与时间相关的默认种子值初始化 Random 类的新实例。循环非常快,然后一些行获得相同的毫秒数和相同的随机种子。 msdn.microsoft.com/en-us/library/system.random.aspx
-
正如您得到的答案中所解释的,重复与
StreamWriter没有任何关系。无论如何,您应该“更正确地”使用它。将其初始化为sw As StreamWriter = New StreamWriter("C:\file.txt", True)足以追加文件(您不需要任何sw = File.AppendText("C:\file.txt")位)。此外,您可能有兴趣将其放在Using语句中(这将避免最后一个sw.Close()并正确处理它)。 -
@Tony 很好的答案。但是 OP 正在使用
StreamWriter并认为这是他得到不需要的行为的原因;在您的解决方案中,您已将其替换;什么可能被误解为“最好不要使用 StreamWriter”(根本不是这样)。 -
谢谢你,我没听懂你说的,把StreamWriter放回去了。我还评论了其他使用 File.AppendAllText 的代码
标签: vb.net