У меня есть следующий фрагмент кода VBSCript, чтобы найти раздел (strSection) и элемент в этом разделе (strItem) в текстовом файле.
Do While Not myINIFile.AtEndOfStream
sl_Sleep(100)
s = myINIFile.ReadLine <--- **This is the line that rises the exception**
If s = strSection Then
'Find the correct line
Do While Not myINIFile.AtEndOfStream
s = myINIFile.ReadLine
If InStr(s, strItem)>0 Then
Exit Do
End if
Loop
Exit Do
End if
Loop
Похоже, что если я не поставлю Sleep (100) (миллисекунды) (или использую более низкие значения, такие как 20 или 50), я в итоге получу исключение, которое говорит: «Процесс не может получить доступ к файлу, потому что другой процесс заблокировал часть файла ".
Я думаю, что условие в методе Do While - это метод ReadLine, который вызывается, пока AtEndOfStream еще не закончил. Однако использование 100 мсек для каждой строки замедляет процесс до недопустимых скоростей.
Это то, что действительно происходит, или проблема где-то еще?
Могу ли я что-нибудь сделать, чтобы предотвратить блокировку этого процесса или подождать немного (пока он не будет освобожден) только , если он заблокирован, чтобы не вызывать исключение?
РЕДАКТИРОВАТЬ: этот код перебирает файл, который выглядит следующим образом:
[Section1]
param1 = 100
param2 = 200
param3 = 300
[Section2]
param1 = 1000
param2 = 2000
param3 = 3000
[Section3]
param1 = 1
param2 = 2
param3 = 5
param4 = 10
param5 = 20
Код должен проходить через файл до тех пор, пока не найдет строку [SectionX] (strSection), а затем продолжить чтение строк, пока не найдет строку «paramx» (strItem). Затем эта строка сохраняется в 's' и обрабатывается позже.