Einzelnen Beitrag anzeigen

dGeek
(Gast)

n/a Beiträge
 
#3

AW: Von BlockRead/BlockWrite wegkommen - IFileOperation steht bereit, aber kein CallB

  Alt 23. Sep 2016, 08:17
Hat SHFileOperation nicht eine Limitierung von 260 Zeichen für den kompletten Dateinamen? Bin mir da gerade nicht sicher.
Wie würde denn ein Callback für SHFileOperation aussehen?

Super kleine Dateien ohne Callback kopiere ich so:
Delphi-Quellcode:
 ZeroMemory(@fos, SizeOf(fos));
 
 with fos do
  begin
  wFunc := aFunc;
  fFlags := FOF_NO_UI;
  pFrom := PChar(aSource.sSourceDirItem + #0);
  pTo := PChar(aDest.sDestDirItem + #0);
 end;
 
 Result := (0 = SHFileOperation(fos));
Ich habe zwar hier ein Callback für CopyFileEx und komme auch da rein, aber ich bekomme nicht raus wieviele Bytes aktuell kopiert wurden:

Delphi-Quellcode:
function CopyCallback(TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred: Int64; dwStreamNumber, dwCallbackReason: DWORD; hSourceFile, hDestinationFile: THandle)
 : DWORD; stdcall;
var
 newpos: Integer;
const
 PROCESS_CONTINUE = 0;
begin
 Result := PROCESS_CONTINUE;
 if dwCallbackReason = CALLBACK_CHUNK_FINISHED then
  begin
   // newpos := Round(TotalBytesTransferred / TotalFileSize * 100);

   Inc(aGlobalVars.iBytesCopied, StreamBytesTransferred); // Geht natürlich in die Hose

   // with progressform.Progressbar do
   // if newpos <> Position then
   // Position := newpos;

   Application.ProcessMessages;
  end;
end;

Geändert von dGeek (23. Sep 2016 um 09:03 Uhr)
  Mit Zitat antworten Zitat