用 StreamWriter 完全覆盖文本文件
Completely overwrite text file with StreamWriter
我正在尝试向我的程序添加一个简单的切换,其中包括写入文件。该文件除了我想阅读 "on" 或 "off".
的一行文本外什么都没有
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" 就好像它只是一个字符一个字符地覆盖并留下它没有覆盖的内容。此外,如果我将它从 "on" 和 "off" 更改为“123456789”和 "off",我将剩下 "off456789"。
我想要的行为是完全覆盖文件。
我想到的一个解决方案是始终删除并重新创建文件,但我希望有一种更简洁的方法来完成此操作,也许我只是遗漏了一些东西。
您专门使用 FileMode.OpenOrCreate
,这意味着 "reuse if exists"。
如果每次都想覆盖文件,使用FileMode.Create
.
更好的是,不要理会显式流(您没有使用 Using
like you should anyway), and simply do <a href="https://docs.microsoft.com/en-us/dotnet/api/system.io.file.writealltext?view=netframework-4.8" rel="nofollow noreferrer">File.WriteAllText</a>(muteFile, "on")
.
我建议只使用将附加设置为 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
我正在尝试向我的程序添加一个简单的切换,其中包括写入文件。该文件除了我想阅读 "on" 或 "off".
的一行文本外什么都没有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" 就好像它只是一个字符一个字符地覆盖并留下它没有覆盖的内容。此外,如果我将它从 "on" 和 "off" 更改为“123456789”和 "off",我将剩下 "off456789"。
我想要的行为是完全覆盖文件。
我想到的一个解决方案是始终删除并重新创建文件,但我希望有一种更简洁的方法来完成此操作,也许我只是遗漏了一些东西。
您专门使用 FileMode.OpenOrCreate
,这意味着 "reuse if exists"。
如果每次都想覆盖文件,使用FileMode.Create
.
更好的是,不要理会显式流(您没有使用 Using
like you should anyway), and simply do <a href="https://docs.microsoft.com/en-us/dotnet/api/system.io.file.writealltext?view=netframework-4.8" rel="nofollow noreferrer">File.WriteAllText</a>(muteFile, "on")
.
我建议只使用将附加设置为 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