FileSystemObject "Permission Denied" auf DeleteFile und CreateTextFile
Ich untersuche ein problem mit einem alten VB6-app, die gerade erst begonnen hat, geschieht auf der speziellen XP-Rechner läuft es. Die Anwendung verarbeitet E-Mail-Nachrichten und für jeden Artikel es schreibt eine Datei in ein lokales Verzeichnis, übergibt den Pfad der Datei an eine andere Funktion für die Verarbeitung löscht dann die Datei über einen Kill-Befehl.
Es scheint alles zu funktionieren, bis ein Fehler während der Verarbeitung. Der Fehler-handler hat keine explizite Töten oder DeleteFile in es, der Fehler wird gerade bearbeitet und die Verarbeitung wird mit der nächsten Nachricht. Sobald dies der Fall ist, die CreateTextFile-Methode schlägt fehl, für jeden weiteren Artikel mit einem 'Permission denied' - Fehler, da die Datei bereits existiert (auch wenn der CreateTextFile-Aufruf übergibt gilt für überschreiben).
Ich habe versucht, verschiedene Dinge, vor allem putting Töten, BFS.DeleteFile oder ein Aufruf an die DeleteFile-API in der error-handler, doch keine dieser arbeiten (die ersten beiden Fehler mit permission denied, die API nicht Fehler aber nicht löschen Sie die Datei entweder).
Ich habe Unlocker installiert auf der Maschine, und der einzige Prozess mit einem lock auf die Datei wird die Anwendung in Frage. Filemon Berichte eine "Zugriffsverletzung" auf der Datei nach einer 'IRP_MJ_CREATE', sobald das problem Auftritt, so denke ich, könnte dies verweist auf das Problem, aber ich kann nicht sehen, was das problem eigentlich ist.
Den vereinfachten code, ist wie folgt:
Do While objMessages.Count > 0
Set fsObj = CreateObject("Scripting.FileSystemObject")
Set tsObj = fsObj.CreateTextFile("C:\Temp\MyFile.txt", True)
...
tsObj.Close
Set tsObj = Nothing
Set fsObj = Nothing
...
<some processing which may raise an error>
...
Kill ("C:\Temp\MyFile.txt") ' Works if no error raised & processing continues ok
...
...
Loop
ErrorHandler:
Kill ("C:\Temp\MyFile.txt") ' Permission Denied
Set fsObj = CreateObject("Scripting.FileSystemObject")
fsObj.DeleteFile("C:\Temp\MyFile.txt", True) ' Permission Denied
Dim lRet As Long
lRet = DeleteFile(gstrBodyTextFile) ' Nothing done
' After error, processing returns to calling procedure
' which is in a loop and calls back into here and starts
' to fail on CreateTextFile
Dieser hat mich ratlos, muss ich zugeben, wenn jemand vorschlagen kann, was es sein könnte würde ich mich freuen. Ich sollte hinzufügen, dass McAfee war auf dem Rechner installiert, aber ich habe entfernt, um auszuschließen, seine inteference (obwohl Unlocker sollte nichts anderes als sich mit der Datei), aber immer noch der Fehler besteht weiterhin.
Dank
tsObj.Close
)?Sie haben ausgefiltert code "<einige Verarbeitungen, die möglicherweise das auslösen einer Fehler - >"...jede chance, dass code openened die betreffende Datei, und der Fehler während der Verarbeitung, die Sie erwähnen, bewirkt, dass Sie zu springen, bevor es geschlossen wird?
Könnten Sie die post der fehlende Abschnitt von code bitte, obwohl Sie erwähnen, es hat eine eigene Fehlerbehandlung, es kann halten Sie die Taste ^_^
Sie sollten wirklich sein, wickeln Sie Ihren Anruf zu "Töten" Sie die Datei in einem check für die Existenz. I. e Wenn fsObj.FileExists("C:\Temp\MyFile.txt") Dann ...
InformationsquelleAutor RichardB | 2012-04-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dies zu lösen, wird es alle, aber ich denke, es ist einen Versuch Wert:
InformationsquelleAutor Sjuul Janssen
Versuchen Sie das folgende problem sein könnte, die Ursache des Fehlers:
Das Programm(oder andere Programme) ist immer noch mit der Datei, wenn Sie gebeten es zu löschen. Sie müssen ordnungsgemäß schließen Sie die Verbindung zuerst mit der Datei.
Überprüfen Sie zunächst, ob die zugeordneten Pfad /Datei existiert vor dem anlegen/löschen der Datei. Wenn du sicher bist, dass die Datei noch vorhanden ist, versuchen Sie zu identifizieren, wenn das Programm das Recht hat, auf den Pfad zugreifen. Sie können die
fso.fileexists()
oderfso.folderexists()
um dies zu tun.Verfügen Sie möglicherweise nicht über die Berechtigung Zugriff auf system-Dateien oder der Pfad, unter dem anderer Benutzer-accounts.
Wenn immer noch nicht funktioniert, überprüfen, ob die Datei kaputt ist. Wahrscheinlich beschädigte Datei verweigert den Zugriff aus Ihrem Programm.
InformationsquelleAutor FrozenFire
Sollten Sie wahrscheinlich fügen Sie eine Exit Function-oder Exit Sub vor dem errorhandler.
InformationsquelleAutor Daniel Björk
Ich weiß, das ist alt, aber durch Zufall stieß ich auf ein ähnlichen Fehler in einigen alten VB6-code unterstütze ich, und die Ursache kann helfen, jemand, der landet auf dieser Seite, wie ich es Tat. Das problem stellte sich heraus, dass mit der Anzahl der Datei-handles geöffnet FreeFile. Wenn die zurückgegebene Anzahl von FreeFile erreicht 255 (das ist es höchstens), Sie beginnen, immer ein 'Permission Denied' - Fehler, wenn Sie öffnen Sie dann eine andere Datei (die ebenfalls einen Datei-handle-Nummer 255) und dann versuchen Sie und löschen Sie es. In meinem Fall war der Fehler einfach, dass die Dateien wurden nicht geschlossen nach Eröffnung.
InformationsquelleAutor PabloInNZ