![]() |
Systemfehlercode 6 beim Kopieren von Dateien
Ab und zu kommt es vor, dass mir Systemfehlercode 6 beim Kopieren von Dateien angezeigt wird.
Die Windows-Hilfe sagt dazu nur Invalid Handle. Was genau soll man mit der Meldung anfangen und warum tritt die auf, wenn die Quelldatei existiert? |
AW: Systemfehlercode 6 beim Kopieren von Dateien
Zitat:
|
AW: Systemfehlercode 6 beim Kopieren von Dateien
Wenn der Fehler auftritt, dann bei allen Kombinationen von Datenträgern.
Hier in dem Fall aber von einer externen Festplatte zur anderen. Ich kopiere Dateien klassisch mit ReadFile und WriteFile blockweise. Der Fehler tritt sporadisch auf. |
AW: Systemfehlercode 6 beim Kopieren von Dateien
Zeig mal den Code.
|
AW: Systemfehlercode 6 beim Kopieren von Dateien
Zitat:
|
AW: Systemfehlercode 6 beim Kopieren von Dateien
Es ist eine Kopie von hier umgeschrieben zu 64bit
![]() Ich nutze diese Funktion statt TFile.Copy weil ich der Meinung bin mehr Kontrolle zu haben. Wie benutzt man TFile.Copy richtig, um auch auf Abbruchereignisse zu reagieren? Ich habs mal so versucht aber das mit dem CallBack funktioniert nicht so richtig. Ich würde gerne auf die Variable die Anzahl Bytes hinzuaddieren, die pro Durchlauf dazukommen Mit der Funktion oben kopiere ich immer in 50MB-Schritten und kann so auch immer schön 50MB auf die Variable hinzuaddieren.
Delphi-Quellcode:
Eine Idee wäre,
Winapi.Windows.CopyFileEx(PWideChar(Source), PWideChar(Dest), @CopyCallback, nil, @Cancel, 0);
function CopyCallback(TotalFileSize, TotalBytesCopied, StreamSize, StreamBytesTransferred: Int64; dwStreamNumber, dwCallbackReason: DWORD; hSourceFile, hDestinationFile: THandle) : DWORD; stdcall; var CanContinue: Boolean; const PROCESS_CONTINUE = 0; begin CanContinue := not Cancel; Result := PROCESS_CONTINUE; if dwCallbackReason = CALLBACK_CHUNK_FINISHED then begin if CanContinue then begin // Auf die Variable BytesCopied möchte ich hinzuaddieren, wieviele Bytes pro Durchlauf kopiert wurden end; end; end;
Delphi-Quellcode:
. In BytesCopiedTemp steht in meinem Fall jetzt durchgehend 1 MB, den ich auf BytesCopied hinzuaddieren kann. Aber so richtig scheint das bei mehreren Dateien auch nicht zu funktionieren, denn BytesCopied geht bei jeder Datei auf 0 zurück wenn mehr als eine Datei kopiert werden soll.
BytesCopiedTemp := BytesCopied - StreamBytesTransferred;
Delphi-Quellcode:
Kann mir da jemand helfen? Auf BytesCopied möchte ich immer die Größe des aktuell kopierten Chunks addieren. Aber 2 Dateien ist BytesCopiedTmp aber so groß wie ein PB und spinnt kurz herum.
if CanContinue then
begin BytesCopiedTmp := BytesCopied - StreamBytesTransferred; Inc(BytesCopied, BytesCopiedTmp); end; |
AW: Systemfehlercode 6 beim Kopieren von Dateien
Zitat:
Gruß K-H |
AW: Systemfehlercode 6 beim Kopieren von Dateien
Wozu die Addition? TotalBytesCopied liefert dir doch schon die bereits kopierten Bytes.
|
AW: Systemfehlercode 6 beim Kopieren von Dateien
Zitat:
Zitat:
Ich habe eine Variable in der steht, wieviele Bytes ingesamt kopiert werden müssen. Bei 2 Dateien mit je 1 GiB also *2.147.483.648. In einer anderen Variable füge ich immer die Bytes hinzu, die der aktuelle Chunk der gerade verarbeitet wurde groß ist. Aus den beiden Variablen errechne ich dann die Prozent für die Ausgabe. Mit anderen Kopiervarianten funktioniert das alles ohne Probleme, nur mit meinem CopyCallback nicht da ich nicht richtig hinter die Berechnung komme. |
AW: Systemfehlercode 6 beim Kopieren von Dateien
Ach sooooo. Bei mehreren Dateien willst du den Gesamtfortschritt.
Und dein Code steht leider nicht oben. Du hast nur den Code verlinkt, den du für 64 Bit umgeschrieben hast. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz