4

在我的代码段中,当我编写文件名脚本时,它在以下行中给了我一个被拒绝的权限:

Set objTextFile = objFSO.OpenTextFile(strDirectory & strFile, ForAppending, True)

这是脚本

'output log info
Function OutputToLog (strToAdd)  
    Dim strDirectory,strFile,strText, objFile,objFolder,objTextFile,objFSO
    strDirectory = "c:\eNet"
    strFile = "\weeklydel.bat"
    'strText = "Book Another Holiday"
    strText = strToAdd

    ' Create the File System Object
    Set objFSO = CreateObject("Scripting.FileSystemObject")

    ' Check that the strDirectory folder exists
    If objFSO.FolderExists(strDirectory) Then
       Set objFolder = objFSO.GetFolder(strDirectory)
    Else
       Set objFolder = objFSO.CreateFolder(strDirectory)
       'WScript.Echo "Just created " & strDirectory
    End If

    If objFSO.FileExists(strDirectory & strFile) Then
       Set objFolder = objFSO.GetFolder(strDirectory)
    Else
       Set objFile = objFSO.CreateTextFile(strDirectory & strFile)
       'Wscript.Echo "Just created " & strDirectory & strFile
    End If

    set objFile = nothing
    set objFolder = nothing
    ' OpenTextFile Method needs a Const value
    ' ForAppending = 8 ForReading = 1, ForWriting = 2
    Const ForAppending = 2

    Set objTextFile = objFSO.OpenTextFile(strDirectory & strFile, ForAppending, True)

    ' Writes strText every time you run this VBScript
    objTextFile.WriteLine(strText)
    objTextFile.Close
End Function

我已经分配了 vbscript 域管理员权限。有任何想法吗?

提前致谢

4

5 回答 5

11

我认为这与文件权限本身无关。这与您使用以下命令创建文件的事实有关:

Set objFile = objFSO.CreateTextFile(strDirectory & strFile)

这会创建文件......并带有对该文件的引用(objFile)

然后在销毁引用之前不要关闭文件

...
'Missing objFile.Close here
Set objFile = nothing
Set objFolder = nothing
...

因此,您正在破坏引用,但将文本流留在内存中,从而锁定您的文件。

然后,当文件已经“打开”时,您将继续尝试重新打开文件。这有点冗长,您在创建文件后已经获得了参考 - 直接写入该参考而不是在创建另一个参考之前销毁参考会更容易。

于 2008-12-15T18:33:27.943 回答
2

物有所值...

由于这一行,我确信我有一个权限错误:

Set LogFile = LogFSO.OpenTextFile(LogFileName, ForWriting, True)

因为那是“权限被拒绝”错误所指向的行。但事实上,我的权限错误是在下面几行:

WshShell.AppActivate(ScreensToRemove(i))
WshShell.SendKeys ("~")
WScript.Sleep(1000)

没有带有这样标题的屏幕,所以 SendKeys 是没有权限的。

当然,解决方案是:

If WshShell.AppActivate(ScreensToRemove(i)) = True Then
   WshShell.SendKeys ("~")
   WScript.Sleep(1000)
End if

希望这可能会有所帮助。

于 2009-12-01T13:22:51.077 回答
1

另外,请确保您没有在 Excel 中打开该文件(我在使用 .csv 文件时遇到了这个问题)...

于 2015-05-19T00:47:27.437 回答
1

在我的特殊情况下,之前存在的文件,我所要做的就是向所有人用户授予权限

于 2015-12-02T22:35:16.933 回答
0

巴拉巴斯特是完全正确的。您需要在第二次重新打开文件之前关闭文件以进行写入,或者使用现有的打开句柄。

于 2008-12-19T02:23:17.493 回答