2008-12-15 7 views
3

Dans mon segment de code, quand je script sur le nom du fichier, il me donne une permission refusée sur la ligne suivante:vbscript: l'autorisation de fso.opentextfile refusé

Set objTextFile = objFSO.OpenTextFile(strDirectory & strFile, ForAppending, True) 

Voici le 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 

J'ai affecté les autorisations d'administrateur de domaine vbscript. Des idées?

merci à l'avance

Répondre

11

Je ne pense pas que cela a à voir avec les autorisations de fichier en tant que tels. Il a à voir avec le fait que vous avez créé le fichier en utilisant:

Set objFile = objFSO.CreateTextFile(strDirectory & strFile) 

qui crée le fichier ... et porte une référence à ce fichier (objFile)

Alors vous ne fermez pas le fichier avant de détruire la référence

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

Par conséquent, vous détruisez la référence, mais en laissant la textstream ouverte en mémoire bloquant ainsi votre fichier.

Vous essayez ensuite de rouvrir le fichier alors que le fichier est déjà "ouvert". C'est un peu long, vous avez déjà une référence après avoir créé le fichier - il serait plus simple d'écrire directement sur ce fichier plutôt que de détruire la référence avant d'en créer une autre.

+0

Belle prise ...... – st0le

0

balabaster est exactement exact. Vous devez soit fermer le fichier avant de le rouvrir une seconde fois pour l'écriture, soit utiliser le handle ouvert existant.

1

pour ce que ça vaut ...

J'étais convaincu que j'eu une erreur d'autorisation en raison de cette ligne:

Set LogFile = LogFSO.OpenTextFile(LogFileName, ForWriting, True) 

Parce que la ligne est que la « permission refusée » l'erreur souligné. Mais en fait, mon erreur d'autorisation était quelques lignes plus bas:

WshShell.AppActivate(ScreensToRemove(i)) 
WshShell.SendKeys ("~") 
WScript.Sleep(1000) 

Il n'y avait pas d'écran avec une telle légende, de sorte que les SendKeys est ce qui n'a pas la permission.

La solution, bien sûr, était:

If WshShell.AppActivate(ScreensToRemove(i)) = True Then 
    WshShell.SendKeys ("~") 
    WScript.Sleep(1000) 
End if 

espoir qui pourrait aider.

0

Aussi, assurez-vous que vous ne disposez pas du fichier ouvert dans Excel (j'ai eu ce problème avec un fichier .csv) ...

0

Dans mon cas le fichier qui existait avant et tout ce que j'eu faire était donner la permission à l'utilisateur Tout le monde