2017-04-07 4 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을 사용하는 경우 OpenFileStream을 반환합니다. 그리고 StreamWriter 생성자를 만들 수 없습니다 (스트림이 아닌 스트림을 사용합니다).

SaveFileDialog을 사용하여 파일에 데이터를 추가하는 방법은 무엇입니까?

+1

StreamReader.ReadToEnd를 사용하여 스트림을 문자열로 변환 – Benno

+0

@Benno 더 자세한 예제를 보여 줄 수 있습니까? 나는이 하나를 시도 :'새로운 StreamReader (SaveFileDialog1.OpenFile)로 FileSW = 새 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.

그래서 당신이 데이터를 추가 할 True 또는 파일을 덮어 거짓 부울을 허용하는 StreamWriter를 생성자와 파일 이름 속성을 사용하여 코드를 작성해야 읽을 수 있습니다.

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

내가 이해하는 것처럼 SaveFileDialog 대신 File Class를 사용하는 것이 더 안전합니까? –

+0

SaveFileDialog는 다른 목적을 가지고 있습니다. StreamWriter 클래스는 File.WriteAllText 및 File.AppendAllText에 의해 내부적으로 사용됩니다. 이 두 가지 방법은 편리한 바로 가기이지만 안전과 관련이 없습니다. – Steve

+0

도움 주셔서 감사합니다! –