【问题标题】:VBScript FileExists fails consistantlyVBScript 文件存在始终失败
【发布时间】:2014-08-04 07:40:50
【问题描述】:

我们正在尝试为我们的应用程序读取一些日志文件,但 FileExists 在每种情况下都失败了。所以我用这个测试代码简化了问题:

Dim filespec, msg
filespec = Chr(34) & "C:\Windows\explorer.exe" & Chr(34) 
'filespec = "C:\Windows\explorer.exe" 
'filespec = Chr(34) & "C:" & Chr(34) 
'filespec = "C:"
'filespec = "default.asp"
 Set fso = CreateObject("Scripting.FileSystemObject")
 If (fso.FileExists(filespec)) Then
     msg = filespec & " exists."
 Else
  msg = filespec & " doesn't exist."
 End If
 Response.Write(msg)

如您所见,我们尝试了添加和不添加 Chr(32)(即双引号字符)的测试。我们正在针对文件 C:\Windows\explorer.exe 进行测试,并且文件 C:\Windows\explorer.exe 确实存在于托管 asp 文件和 iis 服务器的计算机上。我们甚至在简单地检查 C 驱动器是否存在时也会失败。

此外,如果我们尝试查看 default.asp 文件是否存在并且该文件与我们的 filetest.asp 文件位于同一目录中,它甚至会失败。

有人知道为什么我们的 FileExists 总是失败吗?谢谢。

【问题讨论】:

  • 一个有趣的补充:检查文件夹将起作用 Dim NewFolder NewFolder = "C:\Windows" If (fso.FolderExists(NewFolder)) Then msg = NewFolder & " exists."否则 msg = NewFolder & " 不存在。" End If Response.Write(msg) Response.Write("
    ") 但是检查文件夹中已显示存在的文件仍然失败。
  • 奇怪的是,现在 filespec = "C:\Windows\explorer.exe" 可以工作了。但是在同一个目录下找default.asp就不行了。
  • 不要使用额外的引号或Chr(34)。不需要它们。

标签: asp.net iis vbscript file-exists


【解决方案1】:
filespec = "C:\Windows\explorer.exe"

没有额外的引号将起作用。要找到一个文件夹,我们需要使用

 fso.FolderExists

而不是 FileExists。

这仍然没有在同一目录中找到 default.asp 文件。但是这个问题与我们查看另一个驱动器上的日志文件的实际问题相去甚远。这个问题离这个原始问题太远了,所以我会单独发布这个问题。

【讨论】:

    【解决方案2】:

    您可能想尝试将文件夹加载到文件夹对象中并循环访问文件夹对象中的文件。下面是一个例子。

    Set fso = CreateObject("Scripting.FileSystemObject")
    
    FileToFind = "explorer.exe"
    FolderToSearch = "C:\Windows\"
    
    Set myFolder = fso.GetFolder(FolderToSearch)
    
    For each myFile in myFolder.Files
    
        If myFile.Name = FileToFind Then 
            Wscript.echo "Found " & myFolder.Path & "\" & myFile.Name
        End If
    
    Next
    

    【讨论】:

      【解决方案3】:

      您不需要插入额外的引号。删除你的引号就可以了。

       Dim filespec, msg
      
       filespec = "C:\Windows\explorer.exe" 
      
       Set fso = CreateObject("Scripting.FileSystemObject")
       If (fso.FileExists(filespec)) Then
           msg = filespec & " exists."
       Else
           msg = filespec & " doesn't exist."
       End If
      
       Response.Write(msg)
      

      过去,我只注意到在使用 wshshell.run 时需要插入额外的引号,因为空格可能会被解释为文件名的额外参数。

      【讨论】:

        【解决方案4】:

        看来我们的问题根本不在 VBScript 中。该应用程序在 iis 中的 ApplicationPool 中运行。该应用程序池的 Identity 属性是动态创建的 applicationPoolIdentity 用户。这是一个没有权限的用户。因此,本质上,该应用程序是以无权访问任何其他驱动器的用户身份运行的。因此,它无法在任何网络驱动器上找到任何文件。我们将必须创建一个具有适当权限的附加身份,并将我们的 applicationPool 身份设置为使用该自定义帐户。

        我在这里找到了有关如何设置此身份帐户的说明:http://technet.microsoft.com/en-us/library/cc771170%28v=ws.10%29.aspx

        【讨论】:

          猜你喜欢
          • 2021-09-06
          • 2016-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-18
          • 2019-12-19
          • 1970-01-01
          相关资源
          最近更新 更多