我们正在尝试为我们的应用程序读取一些日志文件,但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一直失败的原因?谢谢。
答案 0 :(得分:0)
filespec = "C:\Windows\explorer.exe"
没有额外的引号就行了。要查找我们需要使用的文件夹
fso.FolderExists
而不是FileExists。
这仍然没有在同一目录中找到default.asp文件。但是这个问题与我们的实际问题相去甚远,即查看另一个驱动器上的日志文件。这个问题离这个原始问题太远了,所以我将分别发布这个问题。
答案 1 :(得分:0)
您无需插入其他引号。删除你的报价将很好。
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时需要插入其他引号,因为空格可能会被解释为文件名的附加参数。
答案 2 :(得分:0)
看来我们的问题根本不在VBScript中。该应用程序在iis中的ApplicationPool内运行。该应用程序池的Identity属性是动态创建的applicationPoolIdentity用户。这是没有权限的用户。基本上,应用程序作为用户运行,无法访问任何其他驱动器。因此,它无法在任何网络驱动器上找到任何文件。我们必须使用适当的权限创建其他标识,并设置我们的applicationPool标识以使用该自定义帐户。
我在此处找到了有关如何设置此身份帐户的说明:http://technet.microsoft.com/en-us/library/cc771170%28v=ws.10%29.aspx