Problem mit FileDelete()

09/26/2017 17:54 potato.#1
Hallo,

ich habe derzeit ein Problem bei einem Script, welches auf Dateien in einem Verzeichnis wartet und dann anschließend "verschiebt".
Ursprünglich war ein FileMove() eingebaut, das hatte aber ebenfalls Probleme bereitet, weshalb ich auf FileCopy() und FileDelete() umgestiegen bin.

Ein Auszug aus dem Code:

[...]
For $i = 0 To Ubound($lFileList)-1
Local $lFile[3] = ""
For $k = 0 To 2
$lFile[$k] = FileOpen($fFolder&"\"&$lFileList[$i][$k],1)
If $lFile = -1 Then FileWrite($gLogfile,"Fehler beim Öffnen von "&$fFolder&"\"&$lFileList[$i][$k])
$lPass = True
Next
If $lPass Then
For $k = 0 To 2
FileClose($lFile[$k])
Next
For $k = 0 To 2
If FileCopy($fFolder&"\"&$lFileList[$i][$k],$gMovePath[$gRotation]&"\"&$lFileList[$i][$k],1)=0 Then
FileWrite("verteiler.log",$fFolder&"\"&$lFileList[$i][$k]&" konnte nicht nach "&$gMovePath[$gRotation]&"\"&$lFileList[$i][$k]&" verschoben werden."&@CRLF)
Else
If FileDelete($fFolder&"\"&$lFileList[$i][$k]) Then
If $gDebug Then FileWrite("verteiler.log",$fFolder&"\"&$lFileList[$i][$k]&" gelöscht."&@CRLF)
Else
If $gDebug Then FileWrite("verteiler.log",$fFolder&"\"&$lFileList[$i][$k]&" konnte nicht gelöscht werden."&@CRLF)
EndIf
EndIf
Next
[...]

Laut "verteiler.log", wie im Script angegeben, sind die Dateien erfolgreich gelöscht.
Es handelt sich um 3 Dateien pro Durchlauf, die zueinander gehören:
ABC.fil (nur Text, ca. 1KB)
ABC.tif (Bild, ca. 4MB)
ABC.txt (nur Text, ca. 1KB)
Am Ende des Durchlaufs, mal als Beispiel nach 5000 Dateien, bleiben mir immer .fil und .tif im Ursprungsordner im Windows Explorer hängen. Versuche ich diese zu öffnen, wird mir der Zugang verweigert, alle auf einmal löschen geht nicht (passiert einfach nichts) und beim einzeln Löschen tauchen die Dateien kurze Zeit später wieder auf. Die .txt Dateien sind ohne Probleme verschoben und gelöscht.
In dem Moment sieht es also aus, als wären die Dateien noch da, aber durch irgendetwas gesperrt.
Melde ich den Windows User ab und wieder an, sind die Dateien weg.

Hatte mal jemand vielleicht einen ähnlichen Fall oder kann mir sagen ob das eindeutig AutoIt oder eindeutig ein Windows-Problem ist?

Vielen Dank im Voraus!
09/27/2017 21:59 warfley#2
wäre bei
Code:
FileDelete($fFolder&"\"&$lFileList[$i])
nicht noch der Zugriff auf Element k sinnvoll?
Code:
FileDelete($fFolder&"\"&$lFileList[$i][$k])
Aber wie wäre es mit der [Only registered and activated users can see links. Click Here To Register...] Funktion? Die sollte genau das machen was du suchst und deutlich effizienter. Damit sparst du dir das kopieren des Dateiinhalts denn dabei wird nur der Pfad umgeschrieben. Das sollte dir bei 5000 Dateien einen ordentlichen Speedup geben.
09/28/2017 09:09 potato.#3
Ja, hast du Recht, hatte den Code hierfür in eine andere Schleife gepackt, bei der ich $k hinzugefügt hab, um die Funktion kompakter darzustellen. Hab ich editiert.

FileMove war gefühlt doppelt so schnell, hatte aber in etwa die gleichen Probleme hervorgerufen.
Bin derzeit noch am Prüfen der Server Einstellungen, kann mir irgendwie nicht vorstellen, dass AutoIt der Verursacher ist, aber hätte ja sein können, dass jemand mal ähnliche Probleme bei der Anzahl von Daten gehabt hat.
09/28/2017 09:27 Lawliet#4
Was für ein Windows hast du?
[Only registered and activated users can see links. Click Here To Register...]