簡體   English   中英

vbscript:fso.opentextfile權限被拒絕

[英]vbscript : fso.opentextfile permission denied

在我的代碼段中,當我編寫文件名腳本時,它在以下行給我一個權限被拒絕:

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域管理員權限。 有任何想法嗎?

提前致謝

我不認為這與文件權限本身有關。 它與您使用以下方式創建文件的事實有關:

Set objFile = objFSO.CreateTextFile(strDirectory & strFile)

這會創建文件...並帶有對該文件的引用(objFile)

然后在銷毀引用之前不要關閉文件

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

因此,您正在銷毀引用但將文本流保留在內存中,從而鎖定您的文件。

然后,當文件已經“打開”時,您將繼續嘗試重新打開該文件。 這是一個有點長的啰嗦,你已經在創建文件后得到了一個引用 - 直接寫入它會更容易,而不是在創建另一個之前銷毀引用。

物有所值...

由於這條線,我確信我有一個權限錯誤:

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

希望可能有所幫助。

此外,請確保您沒有在Excel中打開該文件(我有一個.csv文件的問題)...

在我的特定情況下,之前存在的文件和我所要做的就是向Everyone用戶授予權限

巴拉巴斯特是完全正確的。 您需要先關閉文件,然后再次重新打開文件,或者使用現有的打開句柄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM