AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Systemfehlercode 6 beim Kopieren von Dateien

Systemfehlercode 6 beim Kopieren von Dateien

Ein Thema von DieDolly · begonnen am 31. Okt 2019 · letzter Beitrag vom 4. Nov 2019
Antwort Antwort
Seite 1 von 2  1 2   
DieDolly

Registriert seit: 22. Jun 2018
1.619 Beiträge
 
#1

Systemfehlercode 6 beim Kopieren von Dateien

  Alt 31. Okt 2019, 13:49
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?
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
372 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Systemfehlercode 6 beim Kopieren von Dateien

  Alt 31. Okt 2019, 15:01
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?
Wie kopierst Du die Datei? Wo liegt sie (lokale platte, netzlaufwerk?
Peter Below
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
1.619 Beiträge
 
#3

AW: Systemfehlercode 6 beim Kopieren von Dateien

  Alt 31. Okt 2019, 16:21
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.

Geändert von DieDolly (31. Okt 2019 um 16:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Systemfehlercode 6 beim Kopieren von Dateien

  Alt 31. Okt 2019, 17:10
Zeig mal den Code.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
372 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Systemfehlercode 6 beim Kopieren von Dateien

  Alt 1. Nov 2019, 17:59
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.
Verwende doch einfach Copyfile /Sysutils unit, oder TFile.Copy (IOUtils unit)
Peter Below
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
1.619 Beiträge
 
#6

AW: Systemfehlercode 6 beim Kopieren von Dateien

  Alt 1. Nov 2019, 18:12
Es ist eine Kopie von hier umgeschrieben zu 64bit https://stackoverflow.com/questions/...fast-file-copy
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:
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;
Eine Idee wäre, BytesCopiedTemp := BytesCopied - StreamBytesTransferred; . 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.
Delphi-Quellcode:
   if CanContinue then
    begin
     BytesCopiedTmp := BytesCopied - StreamBytesTransferred;
     Inc(BytesCopied, BytesCopiedTmp);
    end;
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.

Geändert von DieDolly ( 1. Nov 2019 um 21:29 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.658 Beiträge
 
Delphi 7 Personal
 
#7

AW: Systemfehlercode 6 beim Kopieren von Dateien

  Alt 2. Nov 2019, 09:44

Eine Idee wäre, BytesCopiedTemp := BytesCopied - StreamBytesTransferred; . 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.
.....

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.
So richtig erschließt sich mir nicht, was da eigentlich abläuft. Vor allem "spinnt kurz herum" ist doch sehr obskur. Zeig doch bitte mal den Code.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

AW: Systemfehlercode 6 beim Kopieren von Dateien

  Alt 2. Nov 2019, 10:01
Wozu die Addition? TotalBytesCopied liefert dir doch schon die bereits kopierten Bytes.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
1.619 Beiträge
 
#9

AW: Systemfehlercode 6 beim Kopieren von Dateien

  Alt 2. Nov 2019, 12:20
Zitat:
Zeig doch bitte mal den Code.
Oben steht er doch.

Zitat:
Wozu die Addition? TotalBytesCopied liefert dir doch schon die bereits kopierten Bytes.
Ich möchte immer die aktuelle Größe des gerade verarbeitetenden Chunks zu einer Variable hinzuaddieren, nicht die gesamte Größe die bis zu dem Zeitpunkt verarbeitet wurde.

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.

Geändert von DieDolly ( 2. Nov 2019 um 12:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

AW: Systemfehlercode 6 beim Kopieren von Dateien

  Alt 2. Nov 2019, 15:48
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf