Приложение, которое зависает и исключение вне диапазона - это две разные вещи. Будьте точны в своем вопросе, если вам нужна помощь.
Кроме того, ваша lineChanger
функция будет , очевидно, потерпит неудачу, если файл, который вы читаете, уже не содержит как минимум 30 строк при нажатии кнопки 5.
Жестко запрограммированное число - это всегда плохая идея в рабочем коде. Если в какой-то момент содержимое файла будет изменено, было бы очень сложно убедиться, что в коде все правильно исправлено.
Если вы действительно хотите использовать такой текстовый файл, то по крайней мере:
- используйте перечисление или константы, определяющие одно место для цели каждой строки.
- используйте класс для управления вашей конфигурацией, чтобы только этот класс знал структуру файла.
Но, как уже упоминалось в другом ответе, было бы предпочтительнее использовать другой формат, например JSON. Почти любой другой формат, кроме двоичных данных, будет предпочтительнее текстового файла (при условии, что содержимое является настройками для вашего приложения).
Сказав, что если вы действительно хотите lineChanger
, то вам следует добавить такой тест:
if (line_to_edit >= arrLine.Length)
{
List<string> list(arrLine);
while (List.Length < line_to_edit) { list.Add(string.Empty); }
list.Add(newText);
arrLine = list.ToArray();
}
else { … old code from question… }
Однако, если вы читаете другие строки из файла или часто читаете строки, может быть очень медленно открывать / читать / обновлять / записывать / закрывать файл каждый раз, когда строка изменяется. Еще одна причина, по которой было бы неплохо иметь класс для управления настройками, чтобы вы загружали их один раз при открытии диалога и один раз при закрытии диалога (при условии, что диалог отображается относительно короткий период времени, и это не критично чтобы сохранить изменения немедленно).