區分您需要的不存在的和不可訪問的文件.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
由於安斯加爾的觀察,該功能可以改進:
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(文件)'返回即使文件存在但你沒有權限,「假」?我會有意想不到的一個'Permission Denied'錯誤產生... – Lankymart
存在不可訪問的文件(所以.FileExists不會引發錯誤,但返回True),如果現有文件不存在,.OpenTextFile將返回「Permission denied」無障礙。 –
@ Ekkehard.Horner這是我試圖建立的似乎奇怪的OP是暗示'FileExists'返回'False'。 – Lankymart