Попытка удалить строку в текстовом файле -VB - PullRequest
1 голос
/ 21 июня 2020

Я новичок в кодировании, поэтому приветствую любую помощь.

Я создал простой список, который отображает массив из текстового файла. Я хотел добавить текстовое поле и кнопку удаления, чтобы пользователь мог ввести слово, а затем удалить эту строку из текстового файла.

Я читал много форумов с различными решениями для этого, но все вернули ошибки - в настоящее время я получаю эту ошибку: «System.IO.IOException: 'Процесс не может получить доступ к файлу' C: \ Users \ hches \ source \ repos \ Inventory \ Inventory \ bin \ Debug \ Stock.txt ', потому что это используется другим процессом. '"

в подпрограмме DeleteLine ()

Вот соответствующий код для кнопки« Удалить »и соответствующей подпрограммы DeleteLine ():

    Private Sub BTDel_Click(sender As Object, e As EventArgs) Handles BTDel.Click

    Dim sr As New StreamReader("Stock.txt")

    Dim i As Integer = 0
    Dim deleted As Boolean = False

    If TBSearch.Text = "" Then
        MsgBox("Please enter an Item to Delete.")
    Else
        Do Until sr.Peek() = -1 Or deleted = True 'prevents it from looping through the whole stock if the item is deleted
            Dim Itm As String = sr.ReadLine()
            If Itm.Contains(TBSearch.Text) Or Itm.ToLower.Contains(TBSearch.Text.ToLower) Then 'if the line read from the text contains the search word, continue
                MsgBox(TBSearch.Text & " has been deleted.") 'simple messagebox says it has been deleted 
                DeleteLine()
                deleted = True
                TBSearch.Clear()
            ElseIf sr.Peek() = -1 Then 'if it reaches the end of the document and it hasn't been found
                MsgBox("Item has not been deleted.") 'message box appears saying it is not deleted
                deleted = False
                TBSearch.Clear()
            End If

            i = i + 1
        Loop
    End If

End Sub

Public Sub DeleteLine()
    Dim line As Integer = 0
    Dim Filename = "Stock.txt"
    Dim TheFileLines As New List(Of String)
    For line = 0 To TheFileLines.Count
        TheFileLines.AddRange(System.IO.File.ReadAllLines(Filename))
        ' if line is beyond end of list then exit sub
        If line >= TheFileLines.Count Then Exit Sub
        TheFileLines.RemoveAt(line)
        System.IO.File.WriteAllLines(Filename, TheFileLines.ToArray)
    Next
End Sub

Большое спасибо за любые указания, Генри.

РЕШЕНО - Всем, кому интересно, я опубликую свое решение, спасибо за помощь.

    Public Sub DeleteLine()
    ArrayLoad() 'populates my array from text file
    File.Delete("Stock.txt") 'deletes original text file

    Dim stockList As List(Of String) = ItemNames.ToList 'creates a list using my array
    stockList.Remove(TBSearch.Text) 'removes the searched item from the list

    File.Create("Stock.txt").Dispose() 'creates a new text file (same name as the original so the program will work fine)
    Using sw As New StreamWriter("Stock.txt") 'sets up a streamwriter to write the new list to the text file
        For Each item As String In stockList
            sw.WriteLine(item)
        Next
        sw.Flush()
        sw.Close()
    End Using
End Sub

End Class

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...