3 Stimmen

Warum schlägt FileCopy unter Windows 7 gelegentlich fehl?

Ich habe ein VB6-Programm, das unter Windows 7 läuft. Es kopiert eine große Anzahl von Dateien und manchmal FileCopy mit einer Zugriffsverletzung fehlschlägt (zwischen 60 und 500 Dateien).

Ich kann es nicht mit einer einzelnen Datei reproduzieren, nur bei solchen Massenkopiervorgängen tritt dieses Problem auf.

Dabei spielt es keine Rolle, ob Quelle/Ziel auf Festplatten, Netzwerkfreigaben oder CD-ROMs liegen.

Was könnte dieses Problem auslösen?

EDITAR: Meine Frage ist vielleicht etwas verworren, deshalb hier noch ein paar Daten:

Lauf 1:

  1. Kopieren von 5.000 Dateien beginnen
  2. Zugriffsverletzung in Datei #983
  3. Zugriffsverletzung auf Datei #1437
  4. Zugriffsverletzung auf Datei #1499
  5. Zugriffsverletzung in der Akte #2132
  6. Zugriffsverletzung in Datei #3456
  7. Zugriffsverletzung in Datei #4320
  8. Erledigt

Lauf 2:

  1. Kopieren von 5.000 Dateien beginnen
  2. Zugriffsverletzung auf Datei #60
  3. Zugriffsverletzung auf Datei #3745
  4. Erledigt

Beobachtungen

  • Die betroffenen Dateien sind immer unterschiedlich
  • Die Anzahl der betroffenen Dateien nimmt tendenziell ab, wenn derselbe Dateistapel mehrmals hintereinander kopiert wird.
  • Die Ausführung als Administrator macht keinen Unterschied
  • Die Anwendung hat Lese-/Schreibzugriff auf alle erforderlichen Dateisystemobjekte
  • Dieses Problem tritt nur auf Windows 7-Arbeitsplätzen auf!

4voto

jasonk Punkte 1570

Beste Vermutung: Ist es möglich, dass ein anderer Benutzer/Anwendung die angegebene Datei zum Zeitpunkt der Ausführung des Prozesses verwendet? (Antivirenscanner, Win7-Suchindexierungstool, Windows Defender usw.) Sie könnten versuchen, den Rechner im abgesicherten Modus zu starten, um alle Hintergrunddienste/-anwendungen zu eliminieren, und den Prozess ausführen, um zu sehen.

Gibt es eine Konsistenz bei den Dateitypen oder der Größe der Dateien, die das Problem verursachen?

Verfügt die Maschine über wenig Ressourcen? RAM/Festplattenplatz

Sie sagten, das Problem tritt unter Win7 auf - betrifft es mehrere Win7-Rechner oder nur einen. (um Systemressourcen gegenüber Software/OS auszuschließen)

Irgendwelche Hinweise in der Ereignisanzeige (Systemsteuerung > Admin-Tools) - zweifelhaft

Dauert es lange, bis der Prozess abgeschlossen ist? Wenn Sie die Leistungseinbußen in Kauf nehmen können, sollten Sie das FSO-Objekt nach jeder Kopie oder nach X Dateien zerstören und neu erstellen, um sicherzustellen, dass es nicht zu einem seltsamen Speicherproblem mit Win7/VB6 kommt.

Nicht unbedingt eine empfohlene Lösung, aber wenn alles andere fehlschlägt, könnten Sie den Fehler behandeln und die Dateien, die ihn auslösen, in einem Wörterbuch/einer Sammlung speichern und den Prozess mit diesen Dateien erneut durchlaufen, wenn Sie fertig sind. Es gibt keine Garantie, dass der Fehler nicht wieder auftritt.

3voto

Jim Mack Punkte 776

Nicht genügend Informationen (wie Sie wahrscheinlich wissen). Protokollieren Sie die Aktivitäten? Wenn nicht, ist das ein guter Anfang. Wenn Sie wissen, ob bestimmte Dateien das Problem sind und ob sich das Problem wiederholen lässt, können Sie es eingrenzen.

In Ihrem Fall würde ich auch alle Fehler abfangen (und protokollieren) und nach einer Wartezeit von N Sekunden N Mal erneut versuchen. Es könnte sein, dass Sie versuchen, Dateien zu kopieren, die von einem anderen Prozess gesperrt sind, und ein erneuter Versuch könnte Zeit verschaffen, bis die Sperre aufgehoben wird.

Wirklich, mehr Daten sind der Schlüssel, und die Protokollierung ist der Weg, um sie zu bekommen.

2voto

nick Punkte 3228

Besteht die Möglichkeit, dass Ihr Antivirenprogramm oder ein Indexer im Weg steht?

Versuchen Sie, eine procmon Trace, während Sie den Fehler reproduzieren, um zu sehen, was tatsächlich fehlschlägt. Anhand der Ablaufverfolgung können Sie feststellen, ob ein anderes Programm das Problem verursacht oder ob Ihre Anwendung versucht, an einen Ort zu schreiben, an den sie nicht schreiben sollte (falsche Berechtigungen) oder kann (ein Temp-/Scratch-Verzeichnis ohne genügend Speicherplatz).

Überprüfen Sie die Präsentationen verlinkt auf der Procmon-Seite oder Mark Russinovichs Blog finden Sie einige gute Beispiele für die Verwendung dieses Tools zur Lösung verschiedener Windows-/Anwendungsrätsel.

1voto

jasonk Punkte 1570

Befindet sich in dem Verzeichnis eine versteckte Datei oder eine Systemdatei, die den Vorgang möglicherweise blockiert?

Macht es einen Unterschied, wenn ich die VB6-App mit der rechten Maustaste "Als Administrator ausführen" ausführe?

Ist der Punkt, an dem es bei der maximalen Anzahl von Dateien im Verzeichnis stirbt? z.B. Sind Sie sicher, dass die obere Grenze auf was auch immer Schleifenstruktur Sie in VB6 verwenden korrekt ist (Count vs count -1)?

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