VB6开发杀毒软件读取ini配置时出现Subscript out of range(9)错误
错误原因
- 数组越界是核心触发点:你定义的
ValueX(10)数组默认下标范围为0~10,仅提供11个存储空间。但代码中a变量的累加逻辑完全不合理:只要读取的行符合=分割格式,每读一行a就会依次累加1/2/3/4/5/6,仅第一次循环走完a就会变成21,远大于数组最大下标10。运行到Ck5对应的逻辑时a已经涨到15,访问ValueX(15)超出数组范围,直接触发错误号9。 - 业务逻辑完全错误:ini配置文件是每行存储一个键值对(比如
Ck1=1、ThemeColor=3),你现在每读取一行就同时给6个复选框赋值,不仅会导致所有复选框的值都被最后一行配置覆盖,也完全不符合ini文件的读写设计。
修正方案
你完全不需要a变量和ValueX数组,直接根据拆分出的键名匹配对应复选框赋值即可,参考代码如下:
Private Sub GetSetting(Path As String) Dim Line As String, tmp() As String If IsFileX(Path) = True Then Open Path For Input As #1 Do While Not EOF(1) Line Input #1, Line tmp = Split(Line, "=") If UBound(tmp) = 1 Then ' 去掉前后空格避免匹配失败 tmp(0) = Trim(tmp(0)) tmp(1) = Trim(tmp(1)) ' 根据键名匹配对应复选框赋值 Select Case tmp(0) Case "Ck1": Ck1.Value = CInt(Left(tmp(1), 1)) Case "Ck2": Ck2.Value = CInt(Left(tmp(1), 1)) Case "Ck3": Ck3.Value = CInt(Left(tmp(1), 1)) Case "Ck4": Ck4.Value = CInt(Left(tmp(1), 1)) Case "Ck5": Ck5.Value = CInt(Left(tmp(1), 1)) Case "Ck6": Ck6.Value = CInt(Left(tmp(1), 1)) ' 其他配置项可以在这里追加 End Select End If Loop Close #1 Else MsgBox " Read Antivirus Setting is ERROR !" & vbNewLine & "Because the file [ MurderAV.ini ] is not found!", vbCritical, "MurderAV Error" End If End Sub
注意要保证你的ini文件里的键名和上面
Select Case里的字符串完全匹配,比如对应Ck5的配置行就是Ck5=1这种格式。
内容的提问来源于stack exchange,提问作者Adrian Theo
相关产品推荐
相关产品推荐

