2016-02-11 55 views
0

在VBScript中,我想知道文件是否存在:區分「文件不存在」和「拒絕訪問」

Set fso = CreateObject("Scripting.FileSystemObject") 
If Not (fso.FileExists(file)) Then 
    msg = " doesn't exist." 
End If 

我的文件是內部網絡上。

有沒有辦法來區分:

  • 文件確實不存在
  • 拒絕訪問

我嘗試用fso.OpenTextFile但對於這兩種情況下,結果總是:Err.Number = 5.

+0

你是說'fso.FileExists(文件)'返回即使文件存在但你沒有權限,「假」?我會有意想不到的一個'Permission Denied'錯誤產生... – Lankymart

+0

存在不可訪問的文件(所以.FileExists不會引發錯誤,但返回True),如果現有文件不存在,.OpenTextFile將返回「Permission denied」無障礙。 –

+0

@ Ekkehard.Horner這是我試圖建立的似乎奇怪的OP是暗示'FileExists'返回'False'。 – Lankymart

回答

3

區分您需要的不存在的和不可訪問的文件.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 
+3

'FileExists'在這裏不需要。對於這兩種情況,「OpenTextFile」都會產生不同的錯誤(錯誤53:文件未找到;錯誤70:訪問被拒絕)。 –

+0

謝謝你們兩位。我會接受你的解決方案,因爲我的問題還不夠清楚。我仍然有這個問題(因爲我的文件有時在我無權訪問的目錄中,但我認爲在vbs中沒有解決方案)。 –

+0

@MariusSeheia您無法枚舉您沒有訪問權限的文件夾的內容。您需要一項服務,爲您提供系統上文件/文件夾的最終清單,以解決此問題。 –