2010-11-17 45 views
0

如何從ListBox中刪除項目,然後從TextFile中刪除該行並用Visual Basic中的新數據重新填充ListBox。淨?如何從列表框中刪除項目和從TextFile中引用相同字符串的文本行

我的源(顯然你不能擁有的StreamReader和StreamWriter訪問同一文件在同一時間):

Private Sub btnDelete_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnDelete.Click 
    Dim FILE_NAME As String = "C:\TextFile.txt" 
    If System.IO.File.Exists(FILE_NAME) = True Then 
     Dim objReader As New System.IO.StreamReader(FILE_NAME) 
     Do While objReader.Peek <> -1 
      If objReader.ReadLine = recordLine Then 
       lstListBox.Items.RemoveAt(currentRecord) 
       numberOfRecords -= 1 
       Dim objWriter As New System.IO.StreamWriter(FILE_NAME, False) 
       For i = 0 To numberOfRecords - 1 
        objWriter.WriteLine(lstListBox.Items(i)) 
       Next i 
       objWriter.Close() 
      End If 
     Loop 
     lstListBox.Items.Clear() 
     numberOfRecords = 0 
     Do While objReader.Peek <> -1 
      lstListBox.Items.Add(objReader.ReadLine) 
      numberOfRecords += 1 
     Loop 
     objReader.Close() 
    Else 
     MsgBox("unknown error") 
    End If 
End Sub 

我很新的VB.Net

+0

我不明白你爲什麼試圖在同一時間訪問它們。 – Tivie 2010-11-18 00:48:13

回答

0

相反的StreamReader和StreamWriter,你可以使用FileStream並使用一個FileAccess類型的ReadWrite。這樣你就可以同時讀寫。

0

它看起來像文本文件可以被認爲具有與列表框相同的行,因爲這是它在這個函數後結束的方式。如果是這種情況,那麼您可以從列表框中刪除該行,然後使用它來編寫文本文件。

Dim ss() As String 
Dim i As Integer 
Dim s As String 

For Each s In ListBox1.Items 
    If s = recordLine Then 
    ListBox1.Items.Remove(s) 
    Exit For 
    End If 
Next s 

ReDim ss(ListBox1.Items.Count - 1) 
For i = 0 To UBound(ss) 
    ss(i) = ListBox1.Items(i) 
Next i 
System.IO.File.WriteAllLines(FILE_NAME, ss) 

如果列表框和文本文件可以是不同的,則可以使用ReadAllLines加載文本文件,刪除從陣列SS線,然後使用WriteAllLines重寫文本文件。