Thema: Delphi CopyFileEx kopiert nicht

Einzelnen Beitrag anzeigen

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