Ich habe den folgenden Teil des VBSCript-Codes, um einen Abschnitt (strSection) und ein Element in diesem Abschnitt (StrItem) in einer Nur-Text-Datei zu finden.Wie kann ich die Wartezeit zwischen zwei Methoden, die auf die gleiche Datei zugreifen, loswerden?
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
Es scheint, dass, wenn ich nicht die eingeschläfert (100) (Millisekunden) (oder niedrigere Werte verwenden wie 20 oder 50) ich schließlich eine Ausnahme erhalten, dass „Der Prozess sagt die Datei nicht, da ein anderer Prozess zugreifen hat einen Teil der Datei gesperrt ".
Ich denke, dass die Bedingung in der Do While die ReadLine-Methode aufgerufen wird, während der AtEndOfStream noch nicht beendet ist. Die Verwendung von 100 ms für jede Leitung verlangsamt jedoch den Prozess auf nicht akzeptable Geschwindigkeiten.
Ist das was wirklich passiert oder ist das Problem woanders? Gibt es etwas, was ich tun kann, um zu verhindern, dass dieser Prozess gesperrt wird oder ein wenig mehr wartet (bis es freigegeben wird) nur wenn es gesperrt ist, so dass es keine Ausnahme auslöst?
EDIT: Dieser Code Schleifen durch eine Datei, die wie folgt aussieht: angeblich durch die Datei gehen, wird
[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
Der Code, bis er die [SectionX] Zeile (strSection) und dann halten findet Lesen von Zeilen, bis sie die Zeile "paramx" (strItem) findet. Diese Zeile wird dann in 's' gespeichert und später verarbeitet.
Funktioniert dieser Code? Wenn Sie einen Blick darauf werfen, sieht es so aus, als würden Sie einen Datei-Stream durchlaufen, bis Sie eine Übereinstimmung erhalten. Dann wiederholen Sie den gleichen Stream erneut. Was verwirrend ist, ist, dass es nichts zu tun scheint. Sobald Sie eine Zeile gefunden haben, die Ihren Suchkriterien entspricht, wird die Schleife einfach beendet. Ich denke, wenn Sie eine Probe der Daten gepostet haben, die Sie versuchen zu analysieren, könnte es helfen. – unrealtrip
Der Code funktioniert, obwohl es diese Art von Engpass hat. Weitere Informationen finden Sie unter Bearbeitete Beschreibung. – EKI
Ich stimme @unrealtrip zu, Sie haben zwei Schleifen, aber beide lesen vom gleichen Stream-Objekt, so dass es den Stream nicht sperren sollte. Schließen Sie den Stream zwischen Aufrufen dieser Funktion ordnungsgemäß? – invert