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;