2012-02-04 113 views
1

我有一個程序,它將數據以下列格式寫入文本文件。如何將文本追加到現有的文本文件

test1 - test1  -  test1  -  test1 

寫完第一行後,文本字段被清除,爲另一輪用戶輸入留出空間。簡單地說,這是應該的樣子:

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

這裏是我的代碼

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. 我以前StreamReader已經閱讀內容的文本文件中,達到它的結束追加新的路線。但是,它顯示IOException錯誤消息進程無法訪問文件'D:\ test.txt',因爲它正在被另一個進程使用。即使在我配置和/或關閉StreamReader也沒有幫助。我在這裏錯過了什麼?

  2. 這段代碼是否能滿足我將多行寫入同一文本文件的初始目的,如上所述?我必須做出任何改變嗎?

非常感謝大家。

回答

5

reader.Close()應關閉文件並釋放所有資源。嘗試在調用Dispose(其中根據MSDN是不是必須的,因爲Close方法不適合您。

Dim writer As New StreamWriter(path, True)將打開該文件的附加文本。Dim writer As New StreamWriter(path)Dim writer As New StreamWriter(path, False)將覆蓋該文件(如果存在的話)關閉文件或創建一個新文件(如果不存在的話)。

如果你仍然得到異常時,請確保你沒有打開該文件在其他地方(如記事本)。

+0

我設置了'Dim writer As New StreamWriter(path,True)',它起作用!這種方式根本不需要「StreamReader」!非常感謝你:) – Isuru 2012-02-04 16:24:48

2

一個非常方便的VB聲明是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() 

注:Dim reader As New StreamReader(path)因爲你reader = File.OpenText(path)分配一個新的閱讀器隨即是過時的。 Dim reader As StreamReader就足夠了。

還要注意,爲了附加更多文本,不需要讀到文件末尾。值True作爲StreamWriter的第二個構造函數參數本身就是這樣做的。除非由於其他原因需要閱讀現有內容,否則應完全刪除StreamReader部分。

+0

是的,我放棄了'StreamReader'。是的,我想我會使用'Using'語句。更容易。謝謝。 – Isuru 2012-02-05 08:43:26

相關問題