使用StreamWriter完全覆盖文本文件

问题描述 投票:1回答:2

我试图在我的程序中添加一个简单的切换,其中包括写入文件。该文件除了一行文本之外什么也没有,我想要“开”或“关”。

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

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

我想到的一个解决方案是始终删除并重新创建文件,但我希望有一种更简洁的方法来实现这一点,也许我只是遗漏了一些东西。

vb.net file filestream streamwriter overwrite
2个回答
1
投票

您专门使用FileMode.OpenOrCreate,意思是“如果存在则重用”。 如果您想每次覆盖该文件,请使用FileMode.Create

更好的是,不要打扰明确的流(你不是像你应该使用的那样使用Using),而只是做File.WriteAllText(muteFile, "on")


1
投票

我建议只使用StreamWriter,将append设置为False。这将每次覆盖该文件。另外,我只是在这里写入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
© www.soinside.com 2019 - 2024. All rights reserved.