2008-12-15 180 views
3

在我的代碼段,當我的腳本的文件名,它給了我一個權限上以下行否認 :的VBScript:fso.opentextfile許可被拒絕

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

在此先感謝

回答

11

我不認爲這與文件權限本身有關。它具有與您創建使用該文件的事實做:

Set objFile = objFSO.CreateTextFile(strDirectory & strFile) 

創建該文件...並攜帶到該文件的引用(OBJFILE)

然後不關閉您之前的文件銷燬參考

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

因此你摧毀了參考,但離開文本流開在內存從而鎖定您的文件。

然後,當文件已經「打開」時,您將繼續嘗試重新打開該文件。這有點冗長,你在創建文件後已經有了一個引用 - 只是直接寫這個文件比在創建另一個引用之前銷燬引用更容易。

+0

好的...... – st0le 2011-12-12 12:57:33

0

balabaster是完全正確的。您需要在重新打開文件之前關閉該文件,然後再寫入,或使用現有的打開的句柄。

1

什麼它的價值...

我確信我有一個權限錯誤,因爲這行:

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 

希望這可以幫助。

0

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

0

在我的具體情況之前存在的文件和所有我有要做的是給每個人的用戶許可

相關問題