Mega Code Archive

 
Categories / Delphi / Files
 

The five methods to copy file

Title: The five methods to copy file Question: There have five methods to copy file,you can chose one to use. Answer: No 1: Procedure FileCopy( Const sourcefilename, targetfilename: String ); Var S, T: TFileStream; Begin S := TFileStream.Create( sourcefilename, fmOpenRead ); try T := TFileStream.Create( targetfilename, fmOpenWrite or fmCreate ); try T.CopyFrom(S, S.Size ) ; finally T.Free; end; finally S.Free; end; End; No 2:{This way uses memory blocks for read/write.} procedure FileCopy(const FromFile, ToFile: string); var FromF, ToF: file; NumRead, NumWritten: Word; Buf: array[1..2048] of Char; begin AssignFile(FromF, FromFile); Reset(FromF, 1); { Record size = 1 } AssignFile(ToF, ToFile); { Open output file } Rewrite(ToF, 1); { Record size = 1 } repeat BlockRead(FromF, Buf, SizeOf(Buf), NumRead); BlockWrite(ToF, Buf, NumRead, NumWritten); until (NumRead = 0) or (NumWritten NumRead); System.CloseFile(FromF); System.CloseFile(ToF); end; No 3. {This one uses LZCopy, which USES LZExpand.} procedure CopyFile(FromFileName, ToFileName: string); var FromFile, ToFile: File; begin AssignFile(FromFile, FromFileName); { Assign FromFile to FromFileName } AssignFile(ToFile, ToFileName); { Assign ToFile to ToFileName } Reset(FromFile); { Open file for input } try Rewrite(ToFile); { Create file for output } try { copy the file an if a negative value is returned raise an exception } if LZCopy(TFileRec(FromFile).Handle, TFileRec(ToFile).Handle) raise Exception.Create('Error using LZCopy') finally CloseFile(ToFile); { Close ToFile } end; finally CloseFile(FromFile); { Close FromFile } end; end; No 4: procedure CopyFile(FromFileName, ToFileName: string); var shellinfo: TSHFileOpStructA; Files:String; begin Files:=FromFileName+#0+#0; with shellinfo do begin Wnd:=Self.handle; wFunc:=FO_COPY; pFrom:=PChar(Files); pTo:=PChar(ToFileName); fFlags:=FOF_NOCONFIRMATION or FOF_SILENT; end; SHFileOperation(shellinfo); end; No 5: copyfile(PChar(FromFileName),PChar(ToFileName),False);