![]() |
CopyFile; MoveFile; SHFileOperation
Die Handhabung von "CopyFile; MoveFile; SHFileOperation" sind mir bekannt, allerdings wenn ich diese anwende bekomme ich keine Zwischenergebnisse.
So wie bei folgendem Code:
Delphi-Quellcode:
Wie kann ich bei CopyFile; MoveFile oder ggf. SHFileOperation zwischen Ergebnisse des Kopiervorganges abfangen und wie in dem Beispiel senden.
function TDhDrive.FileCopy(const FromFile,ToFile:string):boolean;
…. BlockRead(FFrom,Buf,SizeOf(Buf),Count); FSize := FSize + Count; SendMessage(Handle,WM_READ_DRIVE,integer(@FSize),11); while (Count > 0) and not ALeave do begin BlockWrite(FTo,Buf,Count); BlockRead(FFrom,Buf,SizeOf(Buf),Count); FSize := FSize + Count; SendMessage(Handle,WM_READ_DRIVE,integer(@FSize),11); … Das Verschieben und nachfolgendes löschen macht eigentlich das Problem. Klar kann ich eine Datei Kopieren und dann löschen. Bei dem gleichen Laufwerk ist Move immer schneller weil (so denke ich) nicht kopiert wird sondern es werden nur Adressen im Lw neu geschrieben werden. Anderes sieht es aus wenn von C > D Verschoben wird. Dann wird immer auch kopiert. Zwar könnte ich mir das zusammenbasteln. Gibt es aber eine "schöne" Lösung. Danke |
Re: CopyFile; MoveFile; SHFileOperation
schau dir mal
![]() |
Re: CopyFile; MoveFile; SHFileOperation
Und ab Vista geht das sehr einfach mit dem IFileOperation Interface:
![]() Wenn es auch vorher funktionieren soll, ist die von himitsu genannte Funktion möglich oder ein CopyHook: ![]() |
Re: CopyFile; MoveFile; SHFileOperation
![]() |
Re: CopyFile; MoveFile; SHFileOperation
So geht es vom Prinzip her.
Kannte den Befehl (MoveFileWithProgress) nicht. Beim Kopieren und Verschieben in ein anders Lw, wird CopyProgressRoutine ausgeführt sonst nicht. Das aber ist genau das was ich wollte. CopyProgressRoutine, hat bei mir nur die Funktion, das Aufrufen von TMain.Test, und damit zurück zur From in der dann die Sache von TGauge vorhanden ist. Der Tip von Dir >>himitsu<< war wieder mal nicht mit Gold aufzuwiegen, Danke :zwinker: ![]()
Delphi-Quellcode:
//--------------------------------------------------------------------------------------------------
function CopyProgressRoutine(TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred: int64; dwStreamNumber, dwCallbackReason: DWORD; hSourceFile, hDestinationFile: THandle; lpData: pointer): DWORD; stdcall; begin TMain(lpData).Test(TotalFileSize,TotalBytesTransferred); end; //-------------------------------------------------------------------------------------------------- procedure TMain.Test(TotalFileSize,TotalBytesTransferred:int64); begin Gauge1.MaxValue := TotalFileSize div $FFFF; Gauge1.Progress := TotalBytesTransferred div $FFFF; end; //-------------------------------------------------------------------------------------------------- procedure TMain.Button3Click(Sender: TObject); var Result : boolean; FilenameSource, FilenameDest : string; begin FilenameSource := 'E:\Temp\Test.mp3'; FilenameDest := 'D:\01\Test.mp3'; Result := MoveFileWithProgress(PChar(FilenameSource), PChar(FilenameDest), @CopyProgressRoutine, Self, MOVEFILE_COPY_ALLOWED); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz