Чтобы различить несуществующие и не доступные файлы, вам нужны .FileExists и .OpenTextFile:
Option Explicit
Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject")
Function ReadFile(p, ByRef m)
If goFS.FileExists(p) Then
Dim aErr
On Error Resume Next
Set ReadFile = goFS.OpenTextFile(p)
aErr = Array(Err.Number, Err.Description)
On Error GoTo 0
If aErr(0) Then
m = p & " - " & aErr(1)
Set ReadFile = Nothing
Else
m = ""
End If
Else
Set ReadFile = Nothing
m = p & " - no such file"
End If
End Function
Dim p, m
For Each p In Split("e:\roots.own e:\nosuchfile e:\dirsbf.tmp")
Dim tsIn : Set tsIn = ReadFile(p, m)
If tsIn Is Nothing Then
WScript.Echo "fail", m
Else
' read from tsIn
tsIn.Close
WScript.Echo "ok"
End If
Next
Выходные:
cscript 35338634.vbs
fail e:\roots.own - Permission denied
fail e:\nosuchfile - no such file
ok
Благодаря наблюдению Ansgar, то функция может быть улучшена:
Function ReadFile(p, ByRef m)
Dim aErr
On Error Resume Next
Set ReadFile = goFS.OpenTextFile(p)
aErr = Array(Err.Number, Err.Description)
On Error GoTo 0
If aErr(0) Then
m = p & " - " & aErr(1)
Set ReadFile = Nothing
Else
m = ""
End If
End Function
Вы говорите, что 'fso.FileExists (файл)' возвращает 'False', даже если файл существует, но у вас нет разрешения? У меня возникла бы непредвиденная ошибка «Разрешенная ошибка» ... – Lankymart
Недоступные файлы существуют (поэтому .FileExists не вызовет ошибки, но вернет True), а .OpenTextFile вернет «Permission denied», если существующий файл isn ' t доступно. –
@ Ekkehard.Horner Это то, что я пытался установить, казалось странным, OP предлагал, чтобы «FileExists» возвращал «False». – Lankymart