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
Thema durchsuchen
Ansicht
Themen-Optionen

Systemfehlercode 6 beim Kopieren von Dateien

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

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

AW: Systemfehlercode 6 beim Kopieren von Dateien

  Alt 4. Nov 2019, 11:19
Keiner?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.222 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Systemfehlercode 6 beim Kopieren von Dateien

  Alt 4. Nov 2019, 11:42
Ok also ich verstehe es richtig, es geht jetzt mittlerweile um etwas ganz anderes, nämlich "Wie verfolge ich den Gesamtfortschritt wenn ich parallel mittels CopyFileEx mehrere Dateien kopiere, alle aber natürlich den gleichen Callback aufrufen?", richtig?

Ich hätte 2 Ideen:
  1. Jede Copy-Operation bekommt ihren eigenen Callback
  2. Du wertest im Callback einen der Parameter (dwStreamNumber?) aus um daraus zu erkennen, welcher Kopiervorgang bereits wieviel kopiert hat (Doku)
  Mit Zitat antworten Zitat
DieDolly

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

AW: Systemfehlercode 6 beim Kopieren von Dateien

  Alt 4. Nov 2019, 12:01
Zitat:
"Wie verfolge ich den Gesamtfortschritt wenn ich parallel mittels CopyFileEx mehrere Dateien kopiere, alle aber natürlich den gleichen Callback aufrufen?"
Fast. Sequentiell.

2 Dateien sollen kopiert werden. Die erste 1 GB, die zweite 2 GB.
Im CopyFileEx steht Caption := BytesCopied.ToString + ' - ' + BytesCopiedTmp.ToString; Bei der ersten Datei sieht man in der Caption, wie BytesCopied bis 1 GB hochgeht. BytesCopiedTmp ist durchgehend 1 MB (der Chunk).
Wird angefangen die Zweite Datei zu kopieren, fängt BytesCopied wieder bei 0 an statt bei 1GB weiterzumachen.

Geändert von DieDolly ( 4. Nov 2019 um 12:32 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.222 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Systemfehlercode 6 beim Kopieren von Dateien

  Alt 4. Nov 2019, 12:30
Ist doch auch logisch, die beiden Operationen haben nichts miteinander zu tun.
Wenn du es sowieso strikt nacheinander machst kannst du doch den Wert einfach aufaddieren. Verstehe das Problem dahinter ehrlich gesagt nicht.

(Und weshalb sollte es nicht funktionieren zwei Dateien parallel zu kopieren?)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#5

AW: Systemfehlercode 6 beim Kopieren von Dateien

  Alt 4. Nov 2019, 12:32
Wenn du es sowieso strikt nacheinander machst kannst du doch den Wert einfach aufaddieren. Verstehe das Problem dahinter ehrlich gesagt nicht.
Mach ich doch
Delphi-Quellcode:
   if CanContinue then
    begin
     BytesCopiedTmp := BytesCopied - StreamBytesTransferred;
     Inc(BytesCopied, BytesCopiedTmp);

     Caption := BytesCopied.ToString + ' - ' + BytesCopiedTmp.ToString;
    end;
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.222 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Systemfehlercode 6 beim Kopieren von Dateien

  Alt 4. Nov 2019, 12:40
Du musst dir den Wert über den Aufruf des Callbacks hinaus merken. Du brauchst ein Feld in deinem Formular oder wo auch immer du das speichern möchtest, keine lokale Variable.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#7

AW: Systemfehlercode 6 beim Kopieren von Dateien

  Alt 4. Nov 2019, 14:22
BytesCopied und BytesCopiedTmp sind global.

Ich glaube ich habs

Delphi-Quellcode:
// BytesCopied und BytesCopiedTmp sind global

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
     Inc(BytesCopied, StreamBytesTransferred - BytesCopiedTmp);
     BytesCopiedTmp := StreamBytesTransferred;
    end;
  end;
end;

procedure Kopiere;
begin
 BytesCopiedTmp := 0;
 Winapi.Windows.CopyFileEx(quelle, ziel), @CopyCallback, nil, @Cancel, 0);
end;

Geändert von DieDolly ( 4. Nov 2019 um 14:29 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:59 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