Использование System.io.streamwriter, чтобы написать другую строку
-
03-10-2019 - |
Вопрос
Мне нужно обновить счет студентов с новым баллом, но я не могу получить его, чтобы написать в строке, которую студенты текущие оценки его. Это просто удаляет весь текст.
Алекс, Летмет, 0 Дэвид, qwerty1,0 Джон, Пароль, 0 Павел, Лев, 0 Люк, Беннетт, 0 Рональд, Макдональд, 0 Эрин, Немецкий, 0 Лаура, Шотландия, 0 Росс, Дополнительные, 0 Алан, напитки, 0
Try
fileName = "C:\Documents and Settings\Student\Desktop\Task10\primary4.txt"
Dim sWriter As New System.IO.StreamWriter(fileName)
index = lblPosition.Text
sWriter.Write(username(index))
sWriter.Write(",")
sWriter.Write(password(index))
sWriter.Write(",")
sWriter.WriteLine(updatescore(position)
sWriter.Close()
MessageBox.Show("Writing file to disk")
Me.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Решение
Вы не можете обновить определенную строку в текстовом файле. Вы можете переписать только текстовый файл с нуля или добавить к нему. Что не то, что вы хотите здесь.
Вы должны использовать file.readalllines (), чтобы получить строку [] с строками в текстовом файле. Ищите конкретный элемент в массиве, который вы хотите обновить. Затем напишите все это обратно с помощью file.writeallllines ().
Это дорого, конечно, но ваш текстовый файл невелик. Это основная причина, по которой базы данных являются популярными.
Другие советы
Я вижу хотя бы одну дополнительную ошибку здесь (исключение приведет к выходу из файла открытой). Вы должны сделать что-то вроде этого вместо этого:
fileName = "C:\Documents and Settings\Student\Desktop\Task10\primary4.txt"
Dim sWriter As IO.StreamWriter
Try
sWriter = New IO.StreamWriter(fileName, True)
index = lblPosition.Text
sWriter.Write(username(index))
sWriter.Write(",")
sWriter.Write(password(index))
sWriter.Write(",")
sWriter.WriteLine(updatescore(position)
MessageBox.Show("Writing file to disk")
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
sWriter.Close()
End Try
Me.Close()