如何从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的新手
答案 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重写文本文件。