接收System.IndexOutOfRangeException错误

时间:2015-12-12 02:40:43

标签: arrays vb.net directory indexoutofrangeexception

我编写的代码用于计算文本文件中的行数并使用行创建文件夹。 例如,如果有这样的文本

Text1
Text2
Text3

文件夹将使用这些文本制作。这是抛出System.IndexOutOfRangeException错误

的代码
Dim lineCount = File.ReadAllLines(TempPath & "EAB\EAB.txt").Length
For i = 0 To lineCount Step 1
    Dim RAL As String = File.ReadAllLines(TempPath & "EAB\EAB.txt")(i)
    Directory.CreateDirectory(startPath & "\Test\" & RAL & "\")
Next

它可以完美地创建文件夹,但无论何时完成创建文件夹,都会在System.IndexOutOfRangeException中抛出File.ReadAllLines错误。有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

你的异常是因为你试图在位置lineCount读取数组而引起的,事实上,你应该永远不会读过lineCount - 1,这是数组的最后一个位置。

因此,将For语句更改为此将避免例外:

For i = 0 to lineCount - 1

但是,我真的建议您不要立即设置代码,因为您实际上每次重新读取整个文件 {{ 1}},你甚至在循环中做。对于大文件,性能影响将是巨大的。这不好,完全没必要。

相反,使用File.ReadAllLines()循环将是一种更清晰的写法:

For Each

答案 1 :(得分:1)

考虑改变你的代码结构

Dim lines as String() = File.ReadAllLines(...);
Dim count as Integer = lines.Length;

for i as Integer = 0 To count Step 1
   Dim thisLine as String = lines(i)

   //Stuff
next

这样做更好,因为数组首先加载到内存中,并且for循环的每次迭代都不会计算数组的长度

节日快乐