Erstellte Datei zugriff verweigert ?

  • Hi,
    Habe ein Problem, die Datei die hier aus einer sql query besteht wird erstellt doch beim Versuch sie zu öffnen bekomme ich ein Zugriff verweigert.
    Wenn ich das Script aufteile auf daten_hollen_zeitpunkt.exe .... daten_hollen.exe.....daten_übertragenftp.exe und jedes script das nächste aufruft funktioniert es.
    ???

    lg

    Einmal editiert, zuletzt von odpad (21. Februar 2016 um 17:16)

  • Dein Problem ist, dass du die Funktion FileOpen() bzw. FileWrite() und FileClose() falsch anwendest. Schau dir nochmal die Hilfe zu den Funktionen an.

    FileOpen gibt dir ein Dateihandle zurück. Wenn du also FileOpen verwendest muss dieses Handle in allen weiteren FileWrites/Reads und letzlich im FileClose verwendet werden. Übergibt man an Filewrite hingegen einen Dateipfad ist ein vorheriges FileOpen wirkungslos oder führt evtl. sogar zum Zugriffsproblem, da im Falle eines FileWrites mit Dateipfad ein FileOpen innerhalb der Funktion durchgeführt wird, was aber dann scheitern dürfte wenn die Datei zuvor schon von dir exklusiv geöffnet wurde.

    FileClose kann überhaupt nichts mit Dateipfaden anfangen und erwartet wie erwähnt ein Dateihandle.

  • Misterspeed,
    Danke für die Hilfe jetzt hab ich es verbessert aber ich bin nur einen microschritt weiter gekommen
    Jetzt wird die Datei geöffnet doch beim löschen wird berichtet "Die Datei kann nicht gelöscht werden da xyz.exe sie verwendet (also diese datei)"

    hmmm

    AutoIt
    Local $sFilePath = String("C:\projekt\1.txt")
    Local $hFileOpen = FileOpen($sFilePath, 2)
    FileWrite($hFileOpen,"sql bla bla bla,")
    FileClose($hFileOpen)

    3 Mal editiert, zuletzt von minx (21. Februar 2016 um 20:14) aus folgendem Grund: Code-Highlighting

  • Nun da du nur noch in der Funktion _FtpPutFile() auf die später zu löschende Datei zugreifst liegt der Verdacht nahe, dass in dieser Funktion ein Dateihandle geöffnet aber nicht geschlossen wird. Ich frage mich woher diese Funktion stammt, denn die originale Autoit Funktion aus der FTPex UDF trägt den Namen _FTP_FilePut()

  • da bin ich überfragt ich hab die Nacht übersprungen ist mir schon zu viel muss morgen weiter schauen

  • Neben den veralteten (oder nicht Standard) FTP Funktionen, welche du verwendest kommt grundsätzlich auch noch dein Virenscanner als Fehlerursache in Frage. Möglicherweise führt dieser eine Prüfung der Datei durch wenn diese per FTP ins Internet übetragen wird und verhindert so kurzfrisitg die erfolgreiche Löschung.

    Lösung: Testweise Virenscanner deaktivieren und wenn erfolgreich zukünftig die Dateilöschung in einer Schleife durchführen bis diese erfolgreich ist (evtl. mit einem Timeout, damit dein Script nicht endlos erfolglos versucht die Datei zu löschen).

  • Welcher Virenscanner :) keiner weit und breit zu sehen

    Na ich sehe gerade die Datei wird erstellt ich kann sie auch öffnen, doch das script will sie nicht freigeben... ich versteh nicht, das es so schwer ist eine Datei mit Text zu erstellen und die hochladen ...


    Batch : echo 123 >datei.txt

    Autoit:

    • Local $sFilePath = String("C:\projekt\1.txt")
    • Local $hFileOpen = FileOpen($sFilePath, 2)
    • FileWrite($hFileOpen,"123")
    • FileClose($hFileOpen)

    Einmal editiert, zuletzt von odpad (22. Februar 2016 um 18:10)

  • So ist es FileOpen und FileClose braucht man nur unter bestimmten Umständen. Es ist z.B. sehr viel performanter wenn man die Datei nur einmalig öffnet und schließt wenn man tausende male in kurzer Zeit kleine Häppchen in die Datei schreibt, da hier dann der Schreibcache wirkt und unnötiges Öffnen/Schließen entfällt. Auch macht es Sinn FileOpen zu verwenden wenn man einen bestimmten Schreib- oder Lesemodus erzwingen möchte. In deinem Beispiel halte ich FileOpen aber für überflüssig.

    Nun zum eigentlichen Problem:

    Am FileOpen liegt die Dateisperre nun jedenfalls nicht mehr, zumindestens dann wenn das dein komplettes Script ist und du nicht noch irgendwo anderst die Datei "falsch" öffnest/schließt.
    Die wahrscheinlichste Ursache ist also die FTP Funktion. Teste daher wie gesagt die aktuellen Funktionen aus der FTPex.au3 bzw. aktualisiere deine Autoit Version sofern diese extrem veraltet sein sollte.

    Sofern noch nicht passiert wäre evtl. auch ein Rechnerneustart anzuraten. Vielleicht ist da ja nachwievor ein Dateihandle aus vorherigen Fehlversuchen geöffnet.

  • 4ern perfekt Danke

    ok hab ftpex ausprobiert geht nicht... herumprobiert ....wieder nicht hab das alte ftp probiert jetzt geht das auch nicht mehr :( jetzt kann es sein das was hängt

    danke trotzdem

    mfG
    dAX