#vb.net #vb.net-2010
#vb.net #vb.net-2010
Вопрос:
Индекс находился за пределами массива. когда я пытаюсь запустить код , он генерирует эту ошибку. у меня есть две формы : ВОЙТИ и ЗАРЕГИСТРИРОВАТЬСЯ , моя проблема в том, что они не работают вместе и генерируют ошибку, прикрепленную ниже
Dim fs As New FileStream("C:UsersSelmenDesktopvblogs.txt", FileMode.Open, FileAccess.ReadWrite) Dim sr As New StreamReader(fs) Dim sw As New StreamWriter(fs) Dim s As String Dim t() As String Dim trouve As Integer = 0 Dim tt() As String Dim ch As String ch = TextBox1.Text "#" TextBox2.Text "#" TextBox3.Text "#" TextBox4.Text "#" TextBox5.Text tt = ch.Split("#") Do While (trouve = 0) And (sr.Peek gt; -1) s = sr.ReadLine t = s.Split("#") If String.Compare(t(2), tt(2)) = 0 Then trouve = 1 End If Loop If (trouve = 1) Then MsgBox("user existant") Else sw.WriteLine(ch) Me.Hide() Form4.Show() End If sw.Close() sr.Close() fs.Close() End Sub
Если Строка.Сравните(t(2), tt(2)) = 0, тогда я получу:
Исключение IndexOutOfRangeException не было обработано / Индекс находился за пределами массива.
Комментарии:
1. Вам нужно проверить , что в массиве
t
достаточно элементов для доступаt(2)
, поэтому используйте что-то вродеIf t.Length gt;=3 AndAlso String.Compare(t(2), tt(2)) = 0 Then
.2. Во-первых, теперь и навсегда включите опцию Строгий. Свойства проекта -gt; вкладка «Компиляция». Также для будущих проектов Инструменты -gt; Параметры -gt;gt; Проекты и решения -gt;gt;gt; VB по умолчанию
Ответ №1:
Потоки необходимо утилизировать. Вместо использования потоков вы можете легко получить доступ к текстовому файлу с помощью File
класса .net.
File.ReadAllLines
возвращает массив строк в файле. Мы можем перебирать строки в a Для каждого. Нижний регистр c
, следующий "#"
за буквой, сообщает компилятору, что вы предполагаете, что a Char
не a String
. String.Split
ожидает Char
А. Обычно String.Compare
используется для упорядочения строк в алфавитном порядке. Тебе просто нужно =
. Как только мы найдем совпадение, мы выйдем из цикла Exit For
.
На самом деле нам не нужен массив свойств текстовых полей Text
, если только нет совпадения. Помещение элементов в фигурные скобки инициализирует и заполняет массив строк.
File.AppendAllLines
делает то, что он говорит. Он ожидает массив строк. Как и в случае с текстовыми полями, мы помещаем нашу строку для добавления в фигурные скобки.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim p = "path to file" Dim lines = File.ReadAllLines(p) Dim trouve As Integer For Each line In lines Dim thirdField = line.Split("#"c)(2) If thirdField = TextBox3.Text Then trouve = 1 Exit For End If Next If trouve = 1 Then MsgBox("user existant") Else Dim tt = {TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text, TextBox5.Text} File.AppendAllLines(p, {String.Join("#", tt)}) Me.Hid3e() Form4.Show() End If End Sub