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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top