我想将数据写入文件,因此我使用SaveFileDialog
object:
Public Class Form3
Inherits Form
Public callerForm3To1 As Form1
Dim fileStream As Stream = Nothing
Dim fileSW As StreamWriter = Nothing
Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SaveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
SaveFileDialog1.FilterIndex = 2
SaveFileDialog1.RestoreDirectory = True
FlagWriteToFile = False
If SaveFileDialog1.ShowDialog() = DialogResult.OK Then
Btn_writeData.Enabled = True
End If
End Sub
'some code
End Class
然后我将数据写入此打开的文件:
Sub WriteDataToText(data As Long(), appendData As Boolean)
'Dim a As New StreamWriter(SaveFileDialog1.OpenFile(), FileMode.Append) ' ERROR!
fileSW = New StreamWriter(SaveFileDialog1.OpenFile())
If (fileSW IsNot Nothing) Then
fileSW.WriteLine(String.Join(" ", data) + Environment.NewLine)
fileSW.Close()
End If
End Sub
我想要的:有时我需要将数据附加到此文件,有时会覆盖。我为此创建appendData
:如果1
,则在0
后附加,然后覆盖。我知道我可以为文件创建StreamWriter
并为我的目的使用FileMode
。但如果我使用SaveFileDialog
,则方法OpenFile
会返回Stream
!我无法创建StreamWriter构造函数(它需要String而不是Stream)。
如何使用SaveFileDialog
将数据附加到文件?
答案 0 :(得分:1)
您无法使用OpenFile将数据附加到SaveFileDialog中选择的文件中 在关于SaveFileDialog.OpenFile的MSDN文档中,您可以阅读
出于安全考虑,此方法使用。创建一个新文件 选择名称并使用读/写权限打开它。这可能会导致 如果选择要保存的现有文件,则会意外丢失数据。 要在保留现有数据的同时将数据保存到现有文件,请使用 File类使用返回的文件名打开文件 FileName属性。
因此,您应该使用FileName属性编写代码,其中StreamWriter构造函数接受布尔值True以附加数据,或者使用false来覆盖文件。
Sub WriteDataToText(data As Long(), appendData As Boolean)
Using fileSW = New StreamWriter(SaveFileDialog1.FileName, appendData)
fileSW.WriteLine(String.Join(" ", data) + Environment.NewLine)
End Using
End Sub
请记住始终在这些一次性对象周围使用Using语句,以确保正确关闭和处理Stream并避免锁定条件
而是使用你可以编写的File类
Dim newLine = String.Join(" ", data) + Environment.NewLine)
If appendData Then
File.AppendAllText(SaveFileDialog1.FileName, newLine)
else
File.WriteAllText(SaveFileDialog1.FileName, newLine)
End If