AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CopyFileProgress mit Fehler

Ein Thema von Mazel · begonnen am 7. Jul 2007 · letzter Beitrag vom 9. Jul 2007
Antwort Antwort
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#1

CopyFileProgress mit Fehler

  Alt 7. Jul 2007, 18:12
Hallo,

ich habe ein Problem mit CopyFileEx und CopyFileProgress festgestellt, welches ich nicht lösen kann.
Delphi-Quellcode:
var
 test: Byte; // zu Beginn auf 0 gestezt

function CopyFileProgress(TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred: LARGE_INTEGER; dwStreamNumber, dwCallbackReason, hSourceFile, hDestinationFile, lpData: DWORD): DWORD; stdcall;
begin
 Application.ProcessMessages;
 if Main.bCopyCanceled = True then
 begin
  Result := PROGRESS_CANCEL;
  Exit;
 end;
 case dwCallbackReason of
  CALLBACK_CHUNK_FINISHED:
   begin
    Progress.PBrCopy.Position := TotalBytesTransferred.QuadPart;
    Result := PROGRESS_CONTINUE;
   end;
  CALLBACK_STREAM_SWITCH:
   begin
    inc(main.test);
    Main.Caption := inttostr(main.test);
    //Progress.PBrCopy.Max := Trunc(0.3 + Progress.PBrCopy.Max * 100 / Main.FullSize);
    Progress.PBrCopyAll.Position := Progress.PBrCopyAll.Position + Progress.PBrCopy.Max;
    Progress.PBrCopy.Max := TotalFileSize.QuadPart;
    Result := PROGRESS_CONTINUE;
   end;
 end;
end;
Es scheint alles normal zu laufen, bis mir auf fiel, dass die Prozente einfach nicht passen. Zunächst dachte ich es liegt an schlechte Rundungen aber durch die Variable test ist mir aufgefallen, dass nicht dass passiert was soll. Ich habe 50 Dateien ausgewählt, die kopiert werden sollten. Diese 50 Dateien wurden auch sauber kopiert aber test sagt was anderes: 57. Deshalb stimmen auch die Prozente nicht. Der Fortschrittsbalken ist immer schon am Ende obwohl noch Daten kopiert werden.

Wo liegt hier der Fehler?

Gruß
Mazel
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#2

Re: CopyFileProgress mit Fehler

  Alt 8. Jul 2007, 18:02
Hat keiner eine Idee?
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: CopyFileProgress mit Fehler

  Alt 8. Jul 2007, 21:03
Guck mal hier: http://www.michael-puff.de/Developer...opyFileEx.html
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#4

Re: CopyFileProgress mit Fehler

  Alt 9. Jul 2007, 08:10
Danke dir erst einmal. Ich habe jetzt versucht den Code bei mir einzubauen, dabei ist mir aufgefallen, dass da ein kleiner Fehler drinn ist:
Delphi-Quellcode:
ProgressBar1.Max := (Msg.LParam) shl 32) + Msg.WParam;
// ich glaube so sollte es sein oder?
ProgressBar1.Max := (Int64(Msg.LParam) shl 32) + Msg.WParam;
Nun gut. Als ich das ausprobiert habe, kam sofort meine Meldung, dass alle Dateien übertragen wurden. Diese Meldung soll aber normaler Weise erst nach am Ende kommen. Auch die ProgressBars waren nicht zu sehen. Die Dateien wurden also im HiIntergrund kopiert.

Deshalb habe ich an meinen alten Code weiter versucht das Problem zu lösen. Dabei habe ich dies mit Erfolg versucht:
Delphi-Quellcode:
CALLBACK_CHUNK_FINISHED:
   begin
    Progress.PBrCopy.Position := TotalBytesTransferred.QuadPart;
    if Progress.PBrCopy.Position = Progress.PBrCopy.Max then
     begin
      inc(main.test);
      Main.Caption := inttostr(main.test);
      Progress.PBrCopy.Max := Trunc(0.4 + Progress.PBrCopy.Max * 100 / Main.FullSize);
      Progress.PBrCopyAll.Position := Progress.PBrCopyAll.Position + Progress.PBrCopy.Max;
     end;
    Result := PROGRESS_CONTINUE;
   end;
Nun stimmt die übertragene Anzahl von Dateien. Jetzt stellt sich nur noch die Frage, ob ich das hier lassen kann.

Gruß
Mazel
Marcel Jänicke
www.mj-software.net
  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 10:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz