"System.ArgumentOutOfRangeException" произошло в mscorlib.dll

Заранее спасибо! Я пишу приложение для чтения текстового файла и записи в Excel. Для начала я просто пытаюсь прочитать первую строку.

Console.WriteLine правильно выводит строку (которая содержит пробелы между символами), но когда я пытаюсь извлечь символы из строки, я получаю эту ошибку: Дополнительная информация: Индекс и длина должны указывать на местоположение в строке.

while ((input = stream.ReadLine()) != null)
{
  //ACH HEADER LINE
  if (iCurRecLine == 0 && input.IndexOf(HeaderBeginKeyWord) >= 0)     
  {
    Console.WriteLine(input);

    RepDate = input.Substring(23, 6).Trim();
    RecordTypeCode = input.Substring(0, 1).Trim();
    PriorityCode = input.Substring(1, 2).Trim();
    ImmDestination = input.Substring(3, 10).Trim();
    ImmOrigin = input.Substring(13, 10).Trim();
    FileCreatedDate = input.Substring(23, 6).Trim();
    FileCreatedTime = input.Substring(29, 4).Trim();
    FileIDModifier = input.Substring(33, 1).Trim();
    RecordSize = input.Substring(34, 3).Trim();
    BlockingFactor = input.Substring(37, 2).Trim();
    FormatCode = input.Substring(39, 1).Trim();
    Destination = input.Substring(40, 23).Trim();
    Origin = input.Substring(63, 23).Trim();
    ReferenceCode = input.Substring(86, 8).Trim();
    ...
  }
}

Где я ошибся в этом?

1 ответ

Решение

Кажется, в содержимом файла, который вы читаете, нет проверки.

.SubString() бросает ArgumentOutOfRangeException если startIndex plus length indicates a position not within this instance.

Следовательно:

 RepDate = input.Substring(23, 6).Trim();

Может легко потерпеть неудачу и бросить это исключение, если input содержит только 10 символов.

Другие вопросы по тегам