用StreamWriter完全覆盖文本文件

时间:2019-04-29 15:24:17

标签: vb.net file filestream streamwriter overwrite

我正在尝试向程序添加一个简单的切换,该切换将写入文件。该文件除了我要读取为“开”或“关”的一行文字外,什么都没有。

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”。

我想要的行为是完全覆盖文件。

我想到的一种解决方案是始终删除并重新创建文件,但是我希望有一种更干净的方法来完成此操作,也许我只是缺少了一些东西。

2 个答案:

答案 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