Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   CopyFile; MoveFile; SHFileOperation (https://www.delphipraxis.net/140863-copyfile%3B-movefile%3B-shfileoperation.html)

Opa 27. Sep 2009 21:37


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:
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);
Wie kann ich bei CopyFile; MoveFile oder ggf. SHFileOperation zwischen Ergebnisse des Kopiervorganges abfangen und wie in dem Beispiel senden.

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

himitsu 27. Sep 2009 22:00

Re: CopyFile; MoveFile; SHFileOperation
 
schau dir mal MSDN-Library durchsuchenMoveFileWithProgress an :angel:

jaenicke 27. Sep 2009 22:05

Re: CopyFile; MoveFile; SHFileOperation
 
Und ab Vista geht das sehr einfach mit dem IFileOperation Interface:
http://msdn.microsoft.com/en-us/library/bb775771.aspx

Wenn es auch vorher funktionieren soll, ist die von himitsu genannte Funktion möglich oder ein CopyHook:
http://msdn.microsoft.com/en-us/library/bb776048.aspx

Luckie 27. Sep 2009 22:43

Re: CopyFile; MoveFile; SHFileOperation
 
MSDN-Library durchsuchenCopyFileEx würde mir noch einfallen.

Opa 28. Sep 2009 01:19

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:

Von Luckie-ist auch nicht schlecht
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 08:36 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