AGB  ·  Datenschutz  ·  Impressum  







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

CopyFileEx kopiert nicht

Ein Thema von Destroxi · begonnen am 28. Nov 2011 · letzter Beitrag vom 2. Jun 2014
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Luckie
Luckie

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

AW: CopyFileEx kopiert nicht

  Alt 28. Nov 2011, 19:19
Kommt erst der Fehler mit dem Fehlercode 32 noch? Dann könnte 1235 bedeuten dass die Anforderung an die Callback-Funktion abgebrochen wird, was logisch wäre, da die Datei nicht kopiert werden kann.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Destroxi

Registriert seit: 29. Okt 2011
55 Beiträge
 
Delphi 7 Enterprise
 
#12

AW: CopyFileEx kopiert nicht

  Alt 28. Nov 2011, 19:25
Ne 32 kommt nicht mehr, 1235 auch nicht mehr, allerdings kommt ein "Access violation" Error wenn ich @PProgressRoutine als 3. Parameter rein nehme.
Was ist denn da falsch? Finde nichts...
Delphi-Quellcode:
function PProgressRoutine(TotalFileSize,
                            TotalBytesTransferred,
                            StreamSize,
                            StreamBytesTransferred: LARGE_INTEGER;
                            dwStreamNumber,
                            dwCallbackReason: DWORD;
                            hSourceFile,
                            hDestinationFile: THandle;
                            lpData: Pointer): DWORD; stdcall;
var
 Prozent: Integer;
begin
  try
   Prozent := Round(TLMDBiProgressBar(lpData).DarkValue / TLMDBiProgressBar(lpData).Scale * 100);
  except
   Prozent := 0;
  end;
  MainForm.laGesamt.Caption := 'Gesamt-Fortschritt ('+IntToStr(Prozent)+'%):';
  if dwCallbackReason = CALLBACK_STREAM_SWITCH then
    TLMDBiProgressBar(lpData).Scale := TotalFileSize.QuadPart;

  TLMDBiProgressBar(lpData).DarkValue := TotalBytesTransferred.QuadPart;
  Application.ProcessMessages;
  Result := PROGRESS_CONTINUE;
end;
Mfg, Destroxi
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#13

AW: CopyFileEx kopiert nicht

  Alt 28. Nov 2011, 19:44
wenn ich FCancelled wie bei Dir als Prozedurvariable verwende kopiert er genau eine Datei, auch wenn ich die Variable bei jedem Loop setze. Lege ich sie außerhalb an läuft er durch.
Meine PProgressRoutine ist nur noch ein Rumpf von Deiner ....

Irgendwas ist das am Rutschen .....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Destroxi

Registriert seit: 29. Okt 2011
55 Beiträge
 
Delphi 7 Enterprise
 
#14

AW: CopyFileEx kopiert nicht

  Alt 28. Nov 2011, 19:49
Mein Problem ist ja dass ich nen Access Violation Error bekomme wenn ich statt
Code:
If not CopyFileEx(PChar(Files[y]), PChar(ExtractFilePath(aDestPath)+ExtractFileName(Files[y])),
    nil, nil, FCancelled, 0) then
dies schreibe:
Delphi-Quellcode:
If not CopyFileEx(PChar(Files[y]), PChar(ExtractFilePath(aDestPath)+ExtractFileName(Files[y])),
    @PProgressRoutine, nil, FCancelled, 0) then
Ansonsten werd ich das mal probieren wenn kein Access Violation error mehr kommt

Edit: Ja klar, "lpData" muss gesetzt werden; gesagt - getan - und schon klappts

Danke!!!

Edit²: Für alle die die funktionierende Lösung wollen:
Delphi-Quellcode:
function PProgressRoutine(TotalFileSize,
                            TotalBytesTransferred,
                            StreamSize,
                            StreamBytesTransferred: LARGE_INTEGER;
                            dwStreamNumber,
                            dwCallbackReason: DWORD;
                            hSourceFile,
                            hDestinationFile: THandle;
                            lpData: Pointer): DWORD; stdcall;
begin
  if dwCallbackReason = CALLBACK_STREAM_SWITCH then
    TLMDBiProgressBar(lpData).Scale := TotalFileSize.QuadPart;

  TLMDBiProgressBar(lpData).DarkValue := TotalBytesTransferred.QuadPart;
  Application.ProcessMessages;
  Result := PROGRESS_CONTINUE;
end;

procedure ListCopyProgress(const Files: TStrings; aDestPath: String; TotalProgressBar, CurrentProgressBar: TLMDBiProgressBar);
var
  x, y, Prozent: integer;
begin
  x:=Files.Count;
  TotalProgressBar.MinValue := 0;
  TotalProgressBar.Scale := x;
  for y:=0 to x-1 do
  begin
   MainForm.laAktiveDatei.Caption := 'Aktuelle Datei: '+ExtractFileName(Files[y]);
   try
   Prozent := Round(TotalProgressBar.DarkValue / TotalProgressBar.Scale * 100);
  except
   Prozent := 0;
  end;
  MainForm.laGesamt.Caption := 'Gesamt-Fortschritt ('+IntToStr(Prozent)+'%):';
   If not CopyFileEx(PChar(Files[y]), PChar(ExtractFilePath(aDestPath)+ExtractFileName(Files[y])),
    @PProgressRoutine, MainForm.pbAktiveDatei, FCancelled, 0) then
   begin
    ShowMessage('File['+IntToStr(y)+']: '+Files[y]+#10+
                'DestFile['+IntToStr(y)+']: '+ExtractFilePath(aDestPath)+ExtractFileName(Files[y])+#10+
                'Error: '+IntToStr(GetLastError));
   end;
     TotalProgressBar.DarkValue := y+1;
     TotalProgressBar.Update;
     CurrentProgressBar.Update;
 end;
 MainForm.laAktiveDatei.Caption := 'Aktuelle Datei: Keine';
 MainForm.laGesamt.Caption := 'Gesamt-Fortschritt (100%):';
end;
Und anwenden mit bsp:ListCopyProgress(DateienStringList, 'C:\ZielPfad\', ProgressBarAlleDateien, ProgressBarAktiveDatei); Und für alle, die es immer noch nicht verstehen gibts im Anhang nen kleines Beispiel-Programm mit Quellcode
PS: Um dieses Programm nutzen zu können benötigt ihr die LMD Komponenten!

Mfg, Destroxi
Angehängte Dateien
Dateityp: rar Kopierer.rar (357,8 KB, 2x aufgerufen)
Dateityp: zip Kopierer.zip (451,5 KB, 7x aufgerufen)

Geändert von Destroxi (28. Nov 2011 um 20:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#15

AW: CopyFileEx kopiert nicht

  Alt 28. Nov 2011, 20:09
Jetzt meine Frage: Warum funktioniert das nicht (es kopiert die Dateien einfach nicht und liefert immer "False" zurück)?
Meine Antwort: Schau mal, was noch zum Result (return value) im MSDN steht.

MSDN-Library durchsuchenCopyFileEx
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Destroxi

Registriert seit: 29. Okt 2011
55 Beiträge
 
Delphi 7 Enterprise
 
#16

AW: CopyFileEx kopiert nicht

  Alt 28. Nov 2011, 20:23
Zitat:
Edit: Ja klar, "lpData" muss gesetzt werden; gesagt - getan - und schon klappts

Danke!!!
Es klappt bereits

Aber Danke

Mfg, Destroxi
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
542 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: CopyFileEx kopiert nicht

  Alt 2. Jun 2014, 20:50
Nur für den Fall der Fälle - der Beitrag ist ja noch nicht sooo alt und manch einer kommt über Google und kopiert die Routinen hier raus:

Destroxi hat FCancelled als Boolean definiert. Da kann man in eine Falle tappen:

FCancelled als BOOL festlegen

Geändert von Benmik ( 2. Jun 2014 um 22:59 Uhr) Grund: PBOOL in BOOL geändert -> Himitsu
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#18

AW: CopyFileEx kopiert nicht

  Alt 2. Jun 2014, 22:21
Bei der Variable meinst du bestimmt BOOL oder LongBool (anstatt PBOOL).
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
542 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: CopyFileEx kopiert nicht

  Alt 2. Jun 2014, 22:28
So isses ...

Und wenn du mir jetzt noch sagst, warum MainForm.pbAktiveDatei nicht als @MainForm.pbAktiveDatei übergeben wird, obwohl doch ein Pointer gefordert ist...

Geändert von Benmik ( 2. Jun 2014 um 23:05 Uhr) Grund: ... und da fiel mir noch was ein...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#20

AW: CopyFileEx kopiert nicht

  Alt 2. Jun 2014, 23:26
Weil ein Objektzeiger im Prinzip schon ein Pointer ist.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 17:33 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