vbscript: разрешение fso.opentextfile отклонено - PullRequest
3 голосов
/ 15 декабря 2008

В моем сегменте кода, когда я пишу имя файла, он дает мне отказано в разрешении по следующей строке:

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. Есть идеи?

заранее спасибо

Ответы [ 5 ]

11 голосов
/ 15 декабря 2008

Я не думаю, что это связано с разрешениями для файлов как таковыми. Это связано с тем, что вы создали файл, используя:

Set objFile = objFSO.CreateTextFile(strDirectory & strFile)

Это создает файл ... и содержит ссылку на этот файл (objFile)

Тогда вы не закроете файл перед тем, как уничтожить ссылку

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

Следовательно, вы уничтожаете ссылку, но оставляете текстовый поток открытым в памяти, блокируя тем самым ваш файл.

Затем вы пытаетесь повторно открыть файл, пока файл уже «открыт». Это немного затянуто, у вас уже есть ссылка после того, как вы создали файл - было бы проще просто написать прямо к этому, чем уничтожить ссылку до создания другой.

2 голосов
/ 01 декабря 2009

за что стоит ...

Я был убежден, что у меня была ошибка разрешения из-за этой строки:

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

Надеюсь, что это может помочь.

1 голос
/ 03 декабря 2015

В моем конкретном случае файл, который существовал ранее, и все, что мне нужно было сделать, это дать разрешение пользователю «Все»

1 голос
/ 19 мая 2015

Также убедитесь, что у вас нет файла, открытого в Excel (у меня была эта проблема с файлом .csv) ...

0 голосов
/ 19 декабря 2008

Балабастр точно прав. Вам необходимо закрыть файл перед повторным открытием для записи или использовать существующий открытый дескриптор.

...