ReadLine Ввод за конец файла - PullRequest
0 голосов
/ 07 июня 2018

У меня есть следующий код VBS ...

    Option Explicit

Dim objFSO, objShell, objTextFile
Dim strText
Dim prevDate
Dim prevTime
Dim timeLeft
Const strDirectory = "C:"
Const strFile = "\timelog.txt"
Const checkTimeLeftVbs = "C:\checktimeleft.vbs"
Const ForAppending = 8
Const ForReading = 1
Const ForWriting = 2
Dim usageTime       'in minutes

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = WScript.CreateObject ("WScript.Shell")

Function openLogFile(N)
Set objTextFile = objFSO.OpenTextFile(strDirectory & strFile, N, True)
End Function

Function checkPrevInst()
Call openLogFile(ForReading)
prevDate = objTextFile.ReadLine
prevTime = CInt(objTextFile.ReadLine)
objTextFile.Close
If prevDate <> "" Then
    If DateDiff("d", prevDate, Date) >= 1 Then
        Call logStartTime()
    Else
        'Continue monitoring
        Call logTime()
    End If
Else
    'Log file compromised...
    Call logStartTime()
End If
End Function

Function logStartTime()
Call openLogFile(ForWriting)
objTextFile.WriteLine(Date)
objTextFile.WriteLine("0")
objTextFile.Close
prevDate = Date
prevTime = 0
Call logTime()
End Function

Function checkforChanges()
Dim tempPrevDate
Dim tempPrevTime
Call openLogFile(ForReading)
tempPrevDate = objTextFile.ReadLine
tempPrevTime = CInt(objTextFile.ReadLine)
objTextFile.Close
If tempPrevDate = PrevDate Then
    If tempPrevTime <> prevTime Then
        prevTime = tempPrevTime
        timeLeft = usageTime - prevTime
        objShell.Run checkTimeLeftVbs
    End If
End If
End Function

Function logTime()
timeLeft = usageTime - prevTime
objShell.Run checkTimeLeftVbs
Do While timeLeft > 0
    Call openLogFile(ForWriting)
    objTextFile.WriteLine(prevDate)
    objTextFile.WriteLine(prevTime)
        objTextFile.WriteLine(timeLeft)
    objTextFile.Close
    WScript.Sleep 60000
    Call checkforChanges()
    prevTime = prevTime + 1
    timeLeft = usageTime - prevTime
    If timeLeft <= 5 Or timeLeft = 10 Or timeLeft = 15 Then
        objShell.Run checkTimeLeftVbs
    End If
Loop
'Time exceeded
Call timeExceeded()
End Function

Function timeExceeded()
Do While timeLeft <= 0
Call endSession()
WScript.Sleep 10000
Loop
End Function

Function endSession()
objShell.Run "%windir%\SYSTEM32\rundll32.exe user32.dll,LockWorkStation", 0, False
End Function

Function checkDay()
If Weekday(Date, 1) <> "1" And Weekday(Date, 1) <> "6" And Weekday(Date, 1) <> "7" Then
    usageTime = 60      'weekday time, in minutes
Else
    usageTime = 90      'weekend time, in minutes
End If
Call checkPrevInst()
End Function

'Main program
Call checkDay()

, и каждый раз, когда я пытаюсь его запустить, я получаю ошибку ниже

Строка: 25 символов: 1 Ошибка: введите последний конец файла. Код: 800A300E

, это строка, которая вызывает у меня ошибку: prevDate = objTextFile.ReadLine

Не могли бы вы, пожалуйста, помочь мне с этимошибка?

ps что код был скачан с вики-шоу.

1 Ответ

0 голосов
/ 07 июня 2018

Проблема в том, что код пытается прочитать после конца файла.Таким образом, вы можете убедиться, что этого не произойдет, выполнив что-то вроде этого:

Function checkPrevInst()
Call openLogFile(ForReading)

Do While Not objFile.AtEndOfStream
   prevDate = objTextFile.ReadLine
   prevTime = CInt(objTextFile.ReadLine)
Loop

objTextFile.Close
If prevDate <> "" Then
   If DateDiff("d", prevDate, Date) >= 1 Then
       Call logStartTime()
   Else
       'Continue monitoring
       Call logTime()
   End If
Else

'Log file compromised...
Call logStartTime()
End If
End Function

Обратите внимание, что вы только читаете файл, пока он не находится в конце потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...