2012-02-04 4 views
1

다음 형식으로 텍스트 파일에 데이터를 쓰는 프로그램이 있습니다.기존 텍스트 파일에 텍스트를 추가하는 방법

test1 - test1  -  test1  -  test1 

첫 번째 행을 작성한 후 텍스트 입력란이 지워지고 다른 사용자 입력을위한 공간이 생깁니다. 간단하게이가 말했다 그것은 보는 방법 :

test1 - test1  -  test1  -  test1 
test2 - test2  -  test2  -  test2 
test3 - test3  -  test3  -  test3 

가 여기에 내가 추가하는 그것의 끝을 텍스트 파일 안에 이미 내용을 읽고에 도달하는 StreamReader을 사용

If Not File.Exists(path) Then 
    MessageBox.Show("File doesn't exist in the given path", "No File", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    Exit Sub 
Else 

    Dim reader As New StreamReader(path) 
    reader = File.OpenText(path) 
    Dim content As String = reader.ReadToEnd 
    reader.Dispose() 
    reader.Close() 

    Dim writer As New StreamWriter(path) 'this is where the exception occurs 
    writer.Write("Origin : " & Trim(loadOrigin) & vbTab & "-" & vbTab) 
    writer.Write("Destination : " & Trim(destination) & vbTab & vbCrLf & vbCrLf) 

    writer.Write(Trim(txtCarrier.Text) & vbTab & "-" & vbTab) 
    writer.Write(Trim(txtLocation.Text) & vbTab & "-" & vbTab) 
    writer.Write(Trim(txtDest.Text) & vbTab & "-" & vbTab) 
    writer.Write(Trim(txtNotes.Text) & vbTab & vbCrLf & vbCrLf) 

    writer.Close() 
    MessageBox.Show("Text written to file", "Data Saved", MessageBoxButtons.OK, MessageBoxIcon.Information) 
    clearFields() 

End If 
  1. 내 코드입니다 새로운 라인. 그러나 IOException이 표시됩니다. 메시지와 함께 오류가 발생했습니다.이 프로세스는 다른 프로세스에서 사용 중이므로 'D : \ test.txt'파일에 액세스 할 수 없습니다.. 및/또는 닫기StreamReader을 폐기해도 도움이되지 않습니다. 내가 여기서 무엇을 놓치고 있니?

  2. 이 코드는 위에서 언급 한 것처럼 동일한 텍스트 파일에 여러 줄을 쓰는 내 초기 목적을 충족합니까? 변경해야합니까?

대단히 감사합니다.

답변

5

reader.Close()은 파일을 닫고 모든 리소스를 해제해야합니다. Close 방법은

Dim writer As New StreamWriter(path, True)이 존재하는 경우 (파일을 덮어 쓰게됩니다 텍스트입니다. Dim writer As New StreamWriter(path) 또는 Dim writer As New StreamWriter(path, False)를 추가하기위한 파일을 엽니 다 않습니다 당신을 위해. 때문에 MSDN에 따라) 필요하지 않습니다 Dispose을 (호출하기 전에 파일을 닫으십시오 (존재하지 않는 경우)하거나 새 파일을 만듭니다.

을 여전히 예외를 받고하는 경우 (메모장 같은) 다른 곳에서 열려있는 파일이없는 있는지 확인하십시오.

+0

나는 Dim Writer As New StreamWriter (path, True)를 설정하고 작동한다! 그 방법은 처음에는'StreamReader'를 전혀 필요가 없습니다!고맙습니다. :) – Isuru

2

매우 편리 VB를 문은 Using 문이며을 구현하는 모든 리소스에 적용될 수 있습니다.. 어떤 경우에도 using 블록을 떠나기 전에 Dispose()이 호출되도록합니다. 예외가 발생하거나 코드 블록이 예를 들어 Return에 의해 남겨진 경우에도 마찬가지입니다. (플러그를 잡아 당기지 않으면).

Dispose()은 차례로 스트림을 닫습니다.

Dim content As String 
Using reader As StreamReader = File.OpenText(Path) 
    content = reader.ReadToEnd 
End Using 

Using writer As New StreamWriter(Path, True) 'True for append mode 
    writer.Write("Origin : " & Trim(loadOrigin) & vbTab & "-" & vbTab) 
    writer.Write("Destination : " & Trim(destination) & vbTab & vbCrLf & vbCrLf) 

    writer.Write(Trim(txtCarrier.Text) & vbTab & "-" & vbTab) 
    writer.Write(Trim(txtLocation.Text) & vbTab & "-" & vbTab) 
    writer.Write(Trim(txtDest.Text) & vbTab & "-" & vbTab) 
    writer.Write(Trim(txtNotes.Text) & vbTab & vbCrLf & vbCrLf) 
End Using 
MessageBox.Show("Text written to file", "Data Saved", MessageBoxButtons.OK, MessageBoxIcon.Information) 
clearFields() 

참고 : reader = File.OpenText(path) 즉시 이후 새로운 독자를 할당하기 때문에 Dim reader As New StreamReader(path)가되지 않습니다. Dim reader As StreamReader이면 충분합니다.

더 많은 텍스트를 추가하려면 파일의 끝까지 읽을 필요가 없습니다. StreamWriter의 두 번째 생성자 매개 변수 값 True은이 작업을 자체적으로 수행합니다. 다른 이유로 기존 내용을 읽어야하는 경우가 아니면 StreamReader 부분을 완전히 삭제해야합니다.

+0

예, 저는'StreamReader'를 삭제했습니다. 예,'Using' 문을 사용할 것입니다. 훨씬 쉽게. 고맙습니다. – Isuru