如何从TextFile中删除ListBox和文本行中的项目,引用相同的字符串

时间:2010-11-17 19:53:50

标签: vb.net

如何从ListBox中删除一个项目,然后从TextFile中删除该行,并在Visual Basic.Net中使用新数据重新填充ListBox?

我的来源(显然你不能让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的新手

2 个答案:

答案 0 :(得分:0)

您可以使用FileStream并使用FileAccess类型的ReadWrite,而不是StreamReader和StreamWriter。这样你就可以同时读写。

答案 1 :(得分: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重写文本文件。