5 Stimmen

Vbscript: fso.opentextfile Zugriff verweigert

In meinem Code-Abschnitt bekomme ich eine Berechtigungsverweigerung, wenn ich im Skript den Dateinamen angebe, und zwar in folgender Zeile:

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

Hier ist das Skript

'Ausgabeprotokoll-Informationen
Function OutputToLog (strHinzufügen)  
    Dim strDirectory,strDatei,strText, objDatei,objOrdner,objTextFile,objFSO
    strDirectory = "c:\eNet"
    strDatei = "\weeklydel.bat"
    'strText = "Buche einen weiteren Urlaub"
    strText = strHinzufügen

    ' Erstellt das File System Object
    Set objFSO = CreateObject("Scripting.FileSystemObject")

    ' Überprüft, ob der Ordner strDirectory existiert
    If objFSO.FolderExists(strDirectory) Then
       Set objOrdner = objFSO.GetFolder(strDirectory)
    Else
       Set objOrdner = objFSO.CreateFolder(strDirectory)
       'WScript.Echo "Gerade erstellt " & strDirectory
    End If

    If objFSO.FileExists(strDirectory & strDatei) Then
       Set objOrdner = objFSO.GetFolder(strDirectory)
    Else
       Set objDatei = objFSO.CreateTextFile(strDirectory & strDatei)
       'Wscript.Echo "Gerade erstellt " & strDirectory & strDatei
    End If

    set objDatei = nothing
    set objOrdner = nothing
    ' Die OpenTextFile-Methode benötigt einen Const-Wert
    ' ForAppending = 8, ForReading = 1, ForWriting = 2
    Const ForAppending = 2

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

    ' Schreibt strText jedes Mal, wenn Sie dieses VBScript ausführen
    objTextFile.WriteLine(strText)
    objTextFile.Close
End Function

Ich habe dem VBScript-Domänenadministratorberechtigungen zugewiesen. Irgendwelche Ideen?

Danke im Voraus

11voto

BenAlabaster Punkte 37617

Ich denke nicht, dass dies speziell mit Dateiberechtigungen zu tun hat. Es hat damit zu tun, dass Sie die Datei mit erstellt haben:

Set objFile = objFSO.CreateTextFile(strDirectory & strFile)

Dadurch wird die Datei erstellt...und beinhaltet eine Referenz zu dieser Datei (objFile)

Dann schließen Sie die Datei nicht, bevor Sie die Referenz zerstören

...
'Fehlendes objFile.Close hier
Set objFile = nothing
Set objFolder = nothing
...

Daher zerstören Sie die Referenz, lassen den Textstream jedoch im Speicher geöffnet, wodurch Ihre Datei gesperrt wird.

Dann versuchen Sie, die Datei erneut zu öffnen, während die Datei bereits "geöffnet" ist. Dies ist etwas umständlich, Sie haben bereits eine Referenz, nachdem Sie die Datei erstellt haben - es wäre einfacher, direkt darauf zu schreiben, anstatt die Referenz zu zerstören, bevor Sie eine weitere erstellen.

2voto

Chris Punkte 149

Für was es wert ist...

Ich war überzeugt, dass ich einen Berechtigungsfehler hatte, wegen dieser Zeile:

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

Weil das die Zeile ist, auf die der Fehler 'Zugriff verweigert' verwies. Aber tatsächlich war mein Berechtigungsfehler ein paar Zeilen weiter unten:

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

Es gab keinen Bildschirm mit einer solchen Beschriftung, also hatte das SendKeys keine Berechtigung.

Die Lösung war natürlich:

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

Hoffe, das könnte helfen.

1voto

user1420372 Punkte 1807

Außerdem stellen Sie sicher, dass Sie die Datei nicht in Excel geöffnet haben (ich hatte dieses Problem mit einer .csv-Datei)...

1voto

pg2286 Punkte 911

In meinem speziellen Fall handelte es sich um die Datei, die bereits existierte, und alles, was ich tun musste, war, dem Benutzer Jeder die Berechtigung zu geben

0voto

mrTomahawk Punkte 904

Balabaster hat genau recht. Entweder müssen Sie die Datei schließen, bevor Sie sie ein zweites Mal zum Schreiben öffnen, oder den vorhandenen offenen Griff verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X