VBScript: Permissão negada fso.opentextfile
-
21-08-2019 - |
Pergunta
Na minha segmento de código, quando eu roteiro o nome do arquivo, ele me dá uma permissão negada na seguinte linha:
Set objTextFile = objFSO.OpenTextFile(strDirectory & strFile, ForAppending, True)
Aqui está o script
'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
Eu atribuídos os VBScript permissões de administrador de domínio. Alguma ideia?
Agradecemos antecipadamente
Solução
Eu não acho que isso tem a ver com permissões de arquivo em si. Tem a ver com o fato de que você criou o arquivo usando:
Set objFile = objFSO.CreateTextFile(strDirectory & strFile)
Isso cria o arquivo ... e carrega uma referência a esse arquivo (objFile)
Em seguida, você não feche o arquivo antes de destruir a referência
...
'Missing objFile.Close here
Set objFile = nothing
Set objFolder = nothing
...
Por isso você está destruindo a referência, mas deixando a sequência de texto aberto na memória, assim, bloqueando o seu arquivo.
Está, então, prosseguir para tentar re-aberto o arquivo enquanto o arquivo já está "aberto". Isto é um pouco prolixo, você já tem uma referência depois de ter criado o arquivo -. Que seria mais fácil apenas para escrever direto para que ao invés de destruir a referência antes de criar outra
Outras dicas
para que o seu valor ...
eu estava convencido de que eu tinha um erro de permissão por causa dessa linha:
Set LogFile = LogFSO.OpenTextFile(LogFileName, ForWriting, True)
Porque essa é a linha que a 'permissão negada' erro apontado. Mas, na verdade, o meu erro de permissão foi algumas linhas mais abaixo:
WshShell.AppActivate(ScreensToRemove(i))
WshShell.SendKeys ("~")
WScript.Sleep(1000)
Não houve tela com tal rubrica, de modo que os SendKeys é o que não tem permissão.
A solução, é claro, foi:
If WshShell.AppActivate(ScreensToRemove(i)) = True Then
WshShell.SendKeys ("~")
WScript.Sleep(1000)
End if
A esperança que possa ajudar.
Além disso, certifique-se de que você não tem o arquivo aberto no Excel (Eu tive esse problema com um arquivo .csv) ...
Na minha caso particular o arquivo que existia antes e tudo que eu tinha que fazer era permissão dar ao usuário Todos
balabaster é exatamente correto. Você quer necessidade de fechar o arquivo antes de reabri-lo uma segunda vez para escrever, ou usando o identificador aberto existente.