如何使用 SaveFileDialog 将数据附加到文件
How to append data to file using SaveFileDialog
我想将数据写入文件,所以我使用SaveFileDialog
对象:
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
:if 1
then append if 0
then overwrite。我知道我可以为文件创建 StreamWriter
并为我的目的使用 FileMode
。但是如果我使用 SaveFileDialog
它是方法 OpenFile
returns Stream
!而且我无法创建 StreamWriter 构造函数(它需要字符串而不是流)。
如何使用 SaveFileDialog
将数据附加到文件?
您不能使用 OpenFile 将数据附加到在 SaveFileDialog 中选择的文件。
在有关 SaveFileDialog.OpenFile 的 MSDN 文档中,您可以阅读
For security purposes, this method creates a new file with the
selected name and opens it with read/write permissions. This can cause
unintentional loss of data if you select an existing file to save to.
To save data to an existing file while retaining existing data, use
the File class to open the file using the file name returned in the
FileName property.
因此您应该使用 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 并避免锁定条件
而不是使用文件 class 你可以写
Dim newLine = String.Join(" ", data) + Environment.NewLine)
If appendData Then
File.AppendAllText(SaveFileDialog1.FileName, newLine)
else
File.WriteAllText(SaveFileDialog1.FileName, newLine)
End If
我想将数据写入文件,所以我使用SaveFileDialog
对象:
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
:if 1
then append if 0
then overwrite。我知道我可以为文件创建 StreamWriter
并为我的目的使用 FileMode
。但是如果我使用 SaveFileDialog
它是方法 OpenFile
returns Stream
!而且我无法创建 StreamWriter 构造函数(它需要字符串而不是流)。
如何使用 SaveFileDialog
将数据附加到文件?
您不能使用 OpenFile 将数据附加到在 SaveFileDialog 中选择的文件。
在有关 SaveFileDialog.OpenFile 的 MSDN 文档中,您可以阅读
For security purposes, this method creates a new file with the selected name and opens it with read/write permissions. This can cause unintentional loss of data if you select an existing file to save to. To save data to an existing file while retaining existing data, use the File class to open the file using the file name returned in the FileName property.
因此您应该使用 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 并避免锁定条件
而不是使用文件 class 你可以写
Dim newLine = String.Join(" ", data) + Environment.NewLine)
If appendData Then
File.AppendAllText(SaveFileDialog1.FileName, newLine)
else
File.WriteAllText(SaveFileDialog1.FileName, newLine)
End If