2017-04-07 26 views
1

我想將數據寫入文件,所以我用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:如果1則附加,如果0則覆蓋。我知道我可以爲文件創建StreamWriter併爲我的目的使用FileMode。但如果我使用SaveFileDialog它的方法OpenFile返回Stream!而且我無法創建StreamWriter構造函數(它需要String而不是Stream)。

如何使用SaveFileDialog將數據追加到文件?

+1

使用StreamReader將流轉換爲字符串@ReadToEnd – Benno

+0

@Benno你能告訴我更詳細的例子嗎?我試過這個:'Dim sr As New StreamReader(SaveFileDialog1.OpenFile)fileSW = New StreamWriter(sr.ReadToEnd,FileMode.Append)'但是出現錯誤:空路徑名稱不合法。 –

回答

1

您不能使用OpenFile將數據追加到SaveFileDialog中選定的文件。
在MSDN文檔有關SaveFileDialog.OpenFile您可以閱讀

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.

所以,你應該使用與接受真正的追加數據或假覆蓋該文件中boolean值的StreamWriter構造FileName屬性編寫代碼。

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語句,圍繞這些一次性的對象,以確保有關正確的關閉和流的處置和避免鎖定條件

而不是使用文件類,你可以寫

Dim newLine = String.Join(" ", data) + Environment.NewLine) 
If appendData Then 
    File.AppendAllText(SaveFileDialog1.FileName, newLine) 
else 
    File.WriteAllText(SaveFileDialog1.FileName, newLine) 
End If 
+0

據我所知,使用File Class(而不是SaveFileDialog)更安全嗎? –

+0

SaveFileDialog具有不同的用途。 StreamWriter類由File.WriteAllText和File.AppendAllText內部使用。這兩種方法都是方便的捷徑,但沒有任何與安全相關的內容 – Steve

+0

感謝您的幫助! –

相關問題