Vbscript 区别于;文件不存在';“不存在”;及;“拒绝访问”;
在VBScript中,我想知道文件是否存在:Vbscript 区别于;文件不存在';“不存在”;及;“拒绝访问”;,vbscript,file-exists,fso,Vbscript,File Exists,Fso,在VBScript中,我想知道文件是否存在: Set fso = CreateObject("Scripting.FileSystemObject") If Not (fso.FileExists(file)) Then msg = " doesn't exist." End If 我的文件在内部网络上 有没有办法区分: 文件确实不存在 拒绝访问 我尝试使用fso.OpenTextFile,但这两种情况的结果总是:Err.Number=5。以区分您需要的不存在和不可访问的文件。F
Set fso = CreateObject("Scripting.FileSystemObject")
If Not (fso.FileExists(file)) Then
msg = " doesn't exist."
End If
我的文件在内部网络上
有没有办法区分:
- 文件确实不存在
- 拒绝访问
我尝试使用
fso.OpenTextFile
,但这两种情况的结果总是:Err.Number
=5。以区分您需要的不存在和不可访问的文件。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
要区分您所需的不存在和不可访问的文件。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(file)
返回False
?我将生成一个意外的权限被拒绝
错误…存在不可访问的文件(因此.FileExists将不会引发错误,但返回True),而.OpenTextFile将返回“权限被拒绝”如果无法访问现有文件。@Ekkehard.Horner(我试图建立的文件)似乎很奇怪,OP建议FileExists
返回False
。VBScript中的错误5是无效的过程调用或参数
,因此,当您同时调用这两个函数时,很可能您实际上做错了什么FileExists
和OpenTextFile
。由于常见的控制变量是file
变量,您确定file
包含有效值吗?您是说fso.FileExists(file)
返回False
,即使文件存在但您没有权限?我将生成一个意外的权限被拒绝
错误…存在不可访问的文件(因此.FileExists将不会引发错误,但返回True),而.OpenTextFile将返回“权限被拒绝”如果无法访问现有文件。@Ekkehard.Horner(我试图建立的文件)似乎很奇怪,OP建议FileExists
返回False
。VBScript中的错误5是无效的过程调用或参数
,因此,当您同时调用这两个函数时,很可能您实际上做错了什么FileExists
和OpenTextFile
。由于公共支配符是文件
变量,您确定文件
包含有效值吗?文件存在
此处不需要OpenTextFile
针对这两种情况都会引发不同的错误(错误53:找不到文件;错误70:拒绝访问)。谢谢大家。我会接受你的解决方案,因为我的问题不够清楚。我仍然有这个问题(因为我的文件有时位于我无权访问的目录中,但我认为在vbs中没有解决方案)。@MariusSeheia您不能枚举您没有访问权限的文件夹的内容。您需要一项服务,为您提供系统上文件/文件夹的最终列表来解决此问题。FileExists
此处不需要OpenTextFile
针对这两种情况都会引发不同的错误(错误53:找不到文件;错误70:拒绝访问)。谢谢大家。我会接受你的解决方案,因为我的问题不够清楚。我仍然有这个问题(因为我的文件有时位于我无权访问的目录中,但我认为在vbs中没有解决方案)。@MariusSeheia您不能枚举您没有访问权限的文件夹的内容。您需要一项服务,为您提供系统上文件/文件夹的最终列表,以解决此问题。