接收系统.索引超出范围异常错误



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

Text1
Text2
Text3

文件夹将用这些文本制作。这是引发System.IndexOutOfRangeException错误的代码

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

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

您的异常是由于您尝试读取位置 lineCount 的数组,而实际上,您永远不应该读取超过 lineCount - 1 的数组,这是数组的最后一个位置。

因此,将您的For语句更改为此语句将避免异常:

For i = 0 to lineCount - 1

但是,我真的建议不要使用您现在设置代码的方式,因为您实际上每次调用 File.ReadAllLines() 都会重新读取整个文件,即使在循环中也是如此。 对于一个大文件,性能影响将是巨大的。 这不好,完全没有必要。

相反,使用 For Each 循环将是一种更简洁的编写方式:

For Each RAL In File.ReadAllLines(TempPath & "EABEAB.txt")
    Directory.CreateDirectory(startPath & "Test" & RAL & "")
Next

考虑像这样更改代码结构

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循环的每次迭代而计算

节日快乐

最新更新