C# ';System.ArgumentOutOfRangeException';发生在mscorlib.dll中

C# ';System.ArgumentOutOfRangeException';发生在mscorlib.dll中,c#,.net,argumentexception,mscorlib,C#,.net,Argumentexception,Mscorlib,提前谢谢你!我正在编写一个应用程序来读取txt文件并写入Excel。从小事做起,我只是想读第一行 Console.WriteLine正确地输出字符串(字符之间有空格),但当我尝试从字符串中提取字符时,会出现以下错误:附加信息:索引和长度必须引用字符串中的位置 while ((input = stream.ReadLine()) != null) { //ACH HEADER LINE if (iCurRecLine == 0 && input.IndexOf(Header

提前谢谢你!我正在编写一个应用程序来读取txt文件并写入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();
    ...
  }
}

我在这方面哪里出错了?

您正在阅读的文件内容中似乎没有验证

.SubString()
如果

因此:

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

如果
输入仅包含10个字符,则可能很容易失败并引发此异常。

此处打印的内容:
Console.WriteLine(输入),或者更好的是输入字段如何?谢谢。输入行是这样的,总共有94个字符,最后8个字符可以是空白或0(x实际上是空白):101x071000301x6759601771308202341f094101achxxxxxxxxxxxxxxxxxxxxxxxxxxxxfisxachxmilwaukee‌​xxxxxxxx打印时,正确地将x显示为空白。但不确定最后8个空格。我知道子字符串从零开始。我仔细检查了索引和长度,我觉得它们还可以。根据你的建议,我还试图更改最后一个字段的索引和长度,但仍然得到相同的错误…@Hing LunMa:如果你这样做
Console.WriteLine(input.length)
,那么输出是什么?还有,你知道该异常是在哪一行抛出的吗?@Jim good call。打印长度让我仔细查看输入文件,发现他们提交的最后14个字符是空的,而不是空的。谢谢大家的帮助!谢谢你,达伦。输入行是这样的,总共有94个字符,最后8个字符可以是空白或0(x实际上是空白):101x071000301x6759601771308202341f094101achxxxxxxxxxxxxxxxxxxxxxxxxxxxxfisxachxmilwaukeexxxxxxxx+1:结果是正确的答案:行没有他想象的那么长。他只是需要再做一点检查。