我正在尝试向程序添加一个简单的切换,该切换将写入文件。该文件除了我要读取为“开”或“关”的一行文字外,什么都没有。
Private Sub PictureBox2_Click(sender As Object, e As EventArgs) Handles PictureBox2.Click
Dim fStrm As FileStream = File.Open(muteFile, FileMode.OpenOrCreate)
Dim strmWrtr As StreamWriter = New StreamWriter(fStrm)
strmWrtr.Flush()
If PictureBox2.Tag = "On" Then
PictureBox2.Image = My.Resources.SoundOff
PictureBox2.Tag = "Off"
strmWrtr.Write("off", False)
Else
PictureBox2.Image = My.Resources.SoundOn
PictureBox2.Tag = "On"
strmWrtr.Write("on", False)
End If
strmWrtr.Close()
fStrm.Close()
End Sub
一切正常,但其行为与我预期的有所不同。将“ off”写入文件可以正常工作,但是当我使用strmWrtr.Write("on," False)
时,文件包含“ onf”,就好像它只是逐个字符地改写而没有覆盖的内容一样。此外,如果将其从“开”和“关”更改为“ 123456789”和“关”,则剩下“ off456789”。
我想要的行为是完全覆盖文件。
我想到的一种解决方案是始终删除并重新创建文件,但是我希望有一种更干净的方法来完成此操作,也许我只是缺少了一些东西。
答案 0 :(得分:1)
您正在专门使用FileMode.OpenOrCreate
,意思是“如果存在则重用”。
如果您想每次覆盖文件,请使用FileMode.Create
。
更好的是,不要为显式流而烦恼(无论如何您都不会使用Using
),而只需执行File.WriteAllText(muteFile, "on")
。
答案 1 :(得分:1)
我建议只使用附加设置为False的StreamWriter。每次都会覆盖该文件。另外,我只在这里写入using块内的文件。文件打开时,我没有执行其他操作。
Private Sub PictureBox2_Click(sender As Object, e As EventArgs) Handles PictureBox2.Click
If PictureBox2.Tag = "On" Then
PictureBox2.Image = My.Resources.SoundOff
PictureBox2.Tag = "Off"
Else
PictureBox2.Image = My.Resources.SoundOn
PictureBox2.Tag = "On"
End If
Using strmWrtr = New StreamWriter(muteFile, False)
strmWrtr.Write(PictureBox2.Tag, False)
End Using
End Sub