vb.net - 使用 StreamWriter 完全覆盖文本文件
问题描述
我正在尝试向我的程序添加一个简单的切换,其中包括写入文件。除了我想读“开”或“关”的一行文本外,该文件不包含任何内容。
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”。
我想要的行为是完全覆盖文件。
我想到的一个解决方案是始终删除并重新创建文件,但我希望有一种更清洁的方法来完成此操作,也许我只是遗漏了一些东西。
解决方案
我建议只使用附加设置为 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
推荐阅读
- javascript - 悬停时动画 SVG - 悬停时不要做微笑
- sql - 在两个不同的表Oracle之间计数
- ajax - laravel7 工作图像上传,但 ajax 说有错误
- php - 如何使用子主题使以下标题以 h4 标签而不是 h2 输出标题?
- vb.net - 在键盘中按下 Enter 时更改按钮的背景颜色
- powerbi - 根据切片器日期使sql查询动态化
- c++ - 如何从源代码构建 glibcxx 3.4.21?
- cocoapods - 在 Swift 项目中包含 SQLCipher pod 时如何避免构建错误?
- python - Google 趋势 - 如果 isPartial 为真,则删除最后一行
- xquery - 如何在 xquery 中验证 ContextItem