![](/img/trans.png)
[英]VBScript/Classic ASP permission denied with fso.OpenTextFile after several uses
[英]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.